можно ли передать enum в качестве параметра в общую функцию? В приведенном ниже коде я хочу, чтобы функция CreateInstance получала параметр enum в соответствии с заданным типом. Пример кода объясняет вопрос лучше:Передать различные перечисления методу в соответствии с общим типом
public class DrivedA
{
public string myfieldA{get;set;}
public enum DrivedA_Attributes {
A,
B,
C,
}
public void Set(params DerivedClassExtraParameters<DrivedA>[] p)
{
//some code
}
}
public class DrivedB
{
public string myfieldB { get; set; }
public enum DrivedB_Attributes
{
D,
E,
F,
}
public void Set(params DerivedClassExtraParameters<DrivedB>[] p)
{
//some code
}
}
public class DerivedClassExtraParameters<T>
{
internal object myFieldD;
internal string myName;
static public DerivedClassExtraParameters<T> CreateInstance(Enum name, object value)
{
DerivedClassExtraParameters<T> instance = new DerivedClassExtraParameters<T>();
instance.myFieldD = value;
instance.myName = name.ToString();
return instance;
}
}
public class TestClass
{
public static void Main(string[] args)
{
DerivedClassExtraParameters<DrivedB> pB = DerivedClassExtraParameters<DrivedB>.CreateInstance(DrivedB.DrivedB_Attributes.D,"1");
DrivedB b = new DrivedB();
b.Set(pB);
//Line #X, I want this line to give error since DerivedClassExtraParameters<DrivedA>.CreateInstance function should get DrivedA.DrivedA_Attributes enum as parameter, not DrivedB.DrivedB_Attributes.
DerivedClassExtraParameters<DrivedA> pA = DerivedClassExtraParameters<DrivedA>.CreateInstance(DrivedB.DrivedB_Attributes.D, "1");
DrivedA a = new DrivedA();
a.Set(pA);
}
}
вы имеете в виду 'статических открытых DerivedClassExtraParameters CreateInstance (имя TEnum, значение объекта)'? –
Grundy
coder может не знать, какое перечисление использовать, и я хочу предотвратить ошибки времени выполнения. Я не хочу использовать другие generics (TEnum), я хочу, чтобы система поняла правильное перечисление из типа класса (T). Возможно ли, или я могу достичь такой же функциональности с помощью другого подхода? – aldebaran
Какова цель этих перечислений? – Dennis