属性类型取决于枚举值

时间:2009-03-10 15:56:44

标签: c# properties

我应该如何在C#中实现一个包含某个类型属性的类,然后是一个例子:

public class MyObject{
    public someEnum e { get; set;}
    public Object ObjectDependentOnE { get; set; }
}

我希望能够为我的对象返回正确的类型,这取决于我的枚举。 例如,如果e = 1,我的对象是T1 ...

类型

或者我想尝试做错了

任何想法?

2 个答案:

答案 0 :(得分:4)

我不确定你真正想做什么,但似乎你正在寻找仿制药:

public class MyObject<T>
{
   public T SomeProperty{get;set;}
}

您可以将T约束到实现给定接口的类。

用法是:

MyObject<SomethingClass> something = new MyObject<SomethingClass>;

答案 1 :(得分:0)

我不确定你的用例是什么 - 更多的信息可能有助于更好地回答这个问题,但根据我的猜测,你可能想要考虑建立一个工厂类。类似的东西:

class MyClass
{
    public SomeEnum E { get; set; }
    // This might be better as : public Object GetTheObject(SomeEnum E) and eliminating the above property
    public Object GetTheObject()
    {
         switch(this.E)
         {
         case E.Something:
            return new MySomethingObject(); // Or return an instance that already exists...?
         default:
            return new MyDefaultObject();
         }
    }
}

这也可以是带有getter和setter的属性,并获取并设置特定的对象类型。

但是,我建议考虑重新考虑这种方法 - 这似乎是一个非常容易出错的设计,因为它在编译时没有类型安全性,并且非常混淆消费者的POV。