C#我们可以将Class类型作为参数传递给Function并访问方法

时间:2017-10-20 20:52:14

标签: c# function class oop parameter-passing

假设有一个基类

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]

但它没有回答我们如何访问该类的变量。

2 个答案:

答案 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
}