父类中的枚举属性应该在derive类中更改

时间:2013-08-10 18:49:10

标签: c# .net

如果我的父类属性ConditionStatus的数据类型为ConditionEnum,如

interface IArticle
{
    ConditionEnum ConditionStatus {get; set;}
}

枚举表示为ConditionEnum {New, Used};

我很想知道如何在子类中更改此ConditionEnum,以便实现ArticleA的{​​{1}}可以使用IArticle这样的枚举 ConditionEnum {Red, Blue, Yellow};同时实现ArticleB IArticle enum ConditionEnum {Point, Comma, Slash};我认为你有一个想法。

你会怎么做?

3 个答案:

答案 0 :(得分:4)

您可以使您的界面通用:

public interface IArticle<T> where T : struct
{
    T ConditionStatus { get; set; }
}

public class ArticleA : IArticle<ColorEnum>
{
    public ColorEnum ConditionStatus { get; set; }
}

public class ArticleB : IArticle<PunctuationEnum>
{
    public PunctuationEnum ConditionStatus { get; set; }
}

请注意,您无法强制T是枚举...并且您确实需要指定您的实现将使用哪个枚举。目前还不完全清楚这是否会对你有所帮助,但这是关于它的所有内容......

答案 1 :(得分:2)

enums can't derive from other enum types or interfaces以来,几乎不可能。你描述的似乎对我来说是多态的。但是AMAIK,你不能将多态性应用于枚举。

答案 2 :(得分:0)

  1. 这不是父类,而是界面。
  2. 您可以在课程中使用enum,并将其称为ClassA.ConditionEnum.*
  3. class MyClass : IArticle {
        public enum ConditionEnum { Red, Blue, Yellow };
    
        public ConditionEnum myenum;
    }
    
    MyClass c = new MyClass();
    c.myenum = MyClass.ConditionEnum.Red;