2010-10-02 41 views
0

请问下一步怎么办? 如何用Lambda做到这一点? 如果此方法不知道委派对象的类型,是否可以委托某个对象实例并使用它的属性和方法?如何获得父级内的子女财产?

class class_a { 
    public string getChildData<T> (T dynamicInstance) { 
     return dynamicInstance.prop; 
    } 
} 

class class_b : a { 
    public string prop = "prop_b"; 
} 

class class_c : a { 
    public string prop = "prop_c"; 
} 

var inst_b = new b(); 
var inst_c = new c(); 
b.getChildData(b); 
c.getChildData(c); 

目的:让父类中的子女的财产?

更新:使用反射 - http://forums.asp.net/t/1608839.aspx

感谢,阿尔乔姆

回答

5

使用抽象/虚拟财产,而不是一个领域:

abstract class ClassA 
{ 
    public abstract string MyProperty 
    { 
     get; 
    } 

    public void DoIt() 
    { 
     Console.WriteLine(this.MyProperty); 
    } 
} 

class ClassB : ClassA 
{ 
    public override string MyProperty 
    { 
     get { return "prop_b"; } 
    } 
} 

class ClassC : ClassA 
{ 
    public override string MyProperty 
    { 
     get { return "prop_c"; } 
    } 
} 

var instB = new ClassB(); 
var instC = new ClassC(); 
instB.DoIt(); 
instC.DoIt(); 

参见:Inheritance (C# Programming Guide)
参见:override (C# Reference)

+0

感谢您的回复,但它不是我想要的。我需要从创建的实例中获取属性,但在父方法内部传递此实例。 – Anonymous 2010-10-02 13:37:38

+0

@Tema:继承是让基类访问派生类提供的值的常用解决方案。你为什么不想要通常的解决方案? – dtb 2010-10-02 13:39:57

+0

因为我的代码(方法)对于除了两个属性名称以外的所有子类都几乎相同。因此,为了防止每次创建新类时重复它,我决定将其描述为父类的通用方法,它可以获取包含所有必需属性的所需实例。 – Anonymous 2010-10-02 14:00:29