题
我想知道是否有像方式继承,而不是整个类继承的任何功能,让我解释什么,我试图解释:
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类东西。
什么是你真正试图做?