我想知道是否有像方式继承,而不是整个类继承的任何功能,让我解释什么,我试图解释:

class a {
   public void GetA(){
     // some logic here
}
}

class b {
    public void GetB() : new Class().GetA()
}

我知道这看起来奇怪,但我在读怎么办代表团对象组成的图案,我认为这种模式的某些原因。

有帮助吗?

解决方案

如果你只是想叫木屐()GetB()内,但不希望定义或明确GetB()引用类的实例,可以作为一个代表通过木屐()。

在C#,有许多预定义的代表例如动作 Func键。或者,你总是可以推出自己的代表来匹配方法签名。

    class a
    {
        public void GetA()
        {
            Console.WriteLine("Hello World!");
        }
    }

    class b
    {
        // No explicit reference to class a of any kind.
        public void GetB(Action action)
        {
            action();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var a = new a();
            var b = new b();

            b.GetB(a.GetA);
        }
    }

其他提示

做组合物的一个常见方法是创建类B中的私有成员变量类型的类的一个,和在GetB()调用a.GetA()。例如:

class a {
   public void GetA(){
     // some logic here
   }
}

class b {
    private a _a=new a();

    public void GetB()
    {
         _a.GetA();
    } 
}

另一种选择可能是定义称为GetB委托成员变量,而不是简单的方法,并允许调用代码供给由GetB()执行的代码。

我能想到的最接近的是如何在C#中,你可以“继承”一类的,因为它的子类的构造函数(或同一类的重载的构造函数),像这样:

class Animal {
    public string Species { get; set; }

    public Animal(string species) {
        Species = species;
    }
}

class Human : Animal {
    public string Name { get; set; }

    public Human(string name) : base("Homo sapien") {
        Name = name;
    }
}

以上代码的行为是非常简单的:在Human类的构造函数在做任何事情之前基本上呼吁Animal类的构造函数。为什么这个相同的功能不能用于非构造方法,我不知道。

这是不可能的。如果你想b.GetB重用a.GetA的功能,那么你需要实例化一个a和调用a.GetA

一个稍微不同的方法将是接受ClassA的一个实例在ClassB的构造,而不是直接实例化它。这将被应用依赖倒置原则以@灰的回答:

public class ClassB
{
    private readonly ClassA _a;

    public b(ClassA a)
    {
        _a = a;
    }

    public void GetB()
    {
        _a.GetA();

        // Other logic
    }
}
public class Article
{

 public object AddOrUpdate(params object[] paras){

   return null;

  }

}

public class Test:Article
{

 public new object AddOrUpdate(params object[] paras){

   //do your logic......

    return base.AddOrUpdate(paras);

 }


}

你的意思吗?这是inhret一个类可以做得到或组基本对象的属性。

如果你委托做的,你必须做更多的工作以相同的逻辑。

但代表可以得到diffenent域对象,多做过的应用程序的事情。

如果木屐()被改变为一个静态方法,可以简单地称它为GetB内()函数:

class a { 
   public static void GetA() { 
     // some logic here 
   } 
} 

class b { 
    public void GetB() {
      a.GetA();
    }
} 

如果木屐()是不固定的,它是没有意义的,因为木屐()需要对象上下文(例如,不可见“this”指针)通过定义。不能传递对象B到类A的一个实例,如类A不知道B类东西。

什么是你真正试图做?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top