C#Open Instance委托协变和抽象数据

C#Open Instance委托协变和抽象数据

问题描述:

*。我是C#的新手,但在C++方面有经验,并且我陷入了一个想法实现:C#Open Instance委托协变和抽象数据

我想用抽象属性(不是C#属性,但是变量)作为基类和N个派生类这样的继承:

ObjWithProps <-- A <-- B <-- N other classes derived one from another 

属性列表是静态的,所以它会被每个类型初始化一次,而不是每个对象。 A和B中的每一个都可以用唯一的字符串表示的名称添加自己的抽象属性。首先我打算用OpenInstanceDelegates,但事实证明,代表不能共变,对吗?

public delegate T OpenGetterDlg<T>(ObjWithProps instance); 

我不能简单地绑定功能A.GetSomething()OpenGetterDlg因为不同this参数和协方差不会在这里工作。

我能做到这一点,而不是:

public delegate TPropType OpenGetterDlg<TPropType, TThisType>(TThisTypeinstance); 

,但它在屁股的

class CPropWrapper<TPropType, TInstType> where TInstType : ObjWithProps 
{ 
    // Property ID here 
    // Setter Delegate object here 
    // Getter Delegate object here 
} 

太多的强制类型转换列表打交道时,过多的类型参数,可以太多模板变成真正的痛苦......也许有人知道在C#中如何完成这项任务?关键思想:静态道具列表,任何派生类(A,B,C,D)都可以将它们自己的道具添加到列表,封装和最小类型规范中。

在此先感谢!

UPD1:

class ObjWithProps 
{ 
    class CPropertyWrapper 
    { 
    public string Name; 
    public OpenGetterDelegate Getter; 
    public OpenSetterDelegate Setter; 
    } 

    static List<CpropertyWrapper> AbstractProps; 

    public CProperty GetPropertyByName(string name) 
    { 
    // Find property by name and 
    return PropertyFromType(Getter()); 
    } 
} 

cProperty以下为类型,如整数,浮点,myType1,myType2碱包装类。

class A: ObjWithProps 
{ 
    int IQValue; 

    public int getIQ() { return IQValue; } 
    public void setIQ(int iq) { IQValue = iq; } 

    protected override registerProps() 
    { 
    // this one should be called only once 
    registerProperty<int>("IQ", "getIQ", "setIQ"); 
    } 
} 

class B: A 
{ 
    myType1 X; 

    public myType1 getX() { return X; } 
    public void setX(myType1 x) { X= x; } 

    protected override registerProps() 
    { 
    base.registerProps(); 
    registerProperty<myType1>("X", "getX", "setX"); 
    } 
} 
+0

你能显示伪代码,它描述你想要什么?什么是“财产”?它只是一个名字,或者是一个有价值的名字?如果是这样,你想如何访问该值? – Dennis 2013-04-29 10:40:11

+0

@ Dennis,更新后 – JacksonRR 2013-04-29 12:05:40

+0

如果我没有误解你的问题,你不能使用一个简单的Dictionary ? – Mones 2013-04-29 15:15:05

初看,你想从WPF重新发明dependency properties。至少,我看不到任何概念上的差异。

+0

丹尼斯,非常感谢。不知道这个系统已经存在。但是,我需要在不同的平台上使用它,所以System.Windows听起来不太好。那么......是否有机会将WPF PropertySystem复制到智能代理实现中呢,还是没有希望? – JacksonRR 2013-04-29 14:15:02

+0

在我的系统中,卡住的点是 - 通过代理与PropertyWrapper实际获取/设置器的连接。也许你可以给点建议? – JacksonRR 2013-04-29 14:36:25

+0

@JacksonRR:我不是一个单声道开发者,但在你的情况下,我会看单声道(甚至放弃月光) - 可能是他们已经实现了DP机制。这确实不是WPF。 – Dennis 2013-04-29 17:31:59