如果我的父类属性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};
我认为你有一个想法。
你会怎么做?
答案 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)
enum
,并将其称为ClassA.ConditionEnum.*
:
class MyClass : IArticle {
public enum ConditionEnum { Red, Blue, Yellow };
public ConditionEnum myenum;
}
MyClass c = new MyClass();
c.myenum = MyClass.ConditionEnum.Red;