假设有一个基类
class base
{
int x, y;
}
3个派生的单例类A,B,C,x,y初始化为某个值。
示例:
class A : base { x = 1; y = 0;}
class B : base { x = 0; y = 1;}
class C : base { x = 1; y = 1;}
有没有办法将class作为参数传递给方法并访问该类的变量值。 SO,一个可以更新所有3个类的值的函数。
意图:
int call (type classtype)
{
int xvalue = classtype.x;
int yvalue = classtype.y;
}
我在一些帖子中看到过提到的activator.CreateInstance(classtype) How to pass a Class as parameter for a method? [duplicate]
但它没有回答我们如何访问该类的变量。
答案 0 :(得分:0)
您的方法需要接受Type
,然后您才能访问静态属性,因为您没有实例。
int Call(Type classType)
{
var xvalue = (int)classType.GetProperty("x", BindingFlags.Public | BindingFlags.Static).GetValue(null, null);
var yvalue = (int)classType.GetProperty("y", BindingFlags.Public | BindingFlags.Static).GetValue(null, null);
}
虽然我有一种感觉,你真正想要的只是简单的继承或接口作为你的参数。
答案 1 :(得分:0)
您可以更改Call
以接受A,B,C派生自的基类:
int Call(base theClass)
{
if (theClass is A)
{
var ax = theClass.x;
var ay = theClass.y;
}
else if (theClass is B)
{
// etc
}
// etc
}