我有多个班级。每个都定义了两个常量(常量值不同,但我知道每个类都有这2个常量)。这些常量用作DbColumn属性的值(它不能使用Properties)。我想在另一个类中使用这个类作为泛型,并获取常量的值。 这是一个小例子:
public abstract class BaseAssignment
{
//Won't work
public (abstract) const string Item;
public (abstract) const string AssignedItem;
}
public class AssignemtA : BaseAssignment
{
public const string Item = "A";
public const string AssignedItem = "1";
[DbColumn(Item)]
...
[DbColumn(AssignedItem)]
...
}
public class AssignmentB : BaseAssignment
{
public const string Item = "B";
public const string AssignedItem = "2";
[DbColumn(Item)]
...
[DbColumn(AssignedItem)]
...
}
public class AssignmentHandler<Tobj> where Tobj : BaseAssignment
{
public void Test()
{
Console.WriteLine(Tobj.AssignedItem);
}
}
BaseAssignment类不起作用,因为它无法定义抽象常量。有没有可能解决这个问题?
答案 0 :(得分:3)
摘要和常量是正交的。常量是一种静态成员,而抽象意味着它参与继承,应该是实例成员。
我的建议是使用抽象属性。如果你不能使用属性,那么你必须使用反射来读取常量值。
以下是您如何处理反思:
public class AssignmentHandler<TObj> where TObj : BaseAssignment
{
public void Test()
{
var assignedItemField = typeof(TObj).GetField("AssignedItem", BindingFlags.Static | BindingFlags.Public);
Console.WriteLine(assignedItemField .GetRawConstantValue());
}
}
注意:即使您使用抽象属性,也不能使用Tobj.AssignedItem
。您需要Tobj
的实例才能阅读该属性。