通过调用方法获取不存在的变量的值

时间:2014-02-06 03:34:13

标签: c#

听起来很奇怪,我想要访问不是的东西。

以下是一个例子:

int tempVar = myObject.myVar // myVar does not exist;

实际上我希望类运行一个方法,将非现有变量作为参数:

object returningVariables(string variableName)
{
   object desiredObject; // a concrete object that I have stored somewhere in an array inside the class

   // going trough some List that contains names of all variables, when it finds it
   // return it

   return desiredObject;
}

我将尝试用一个具体的例子来解释我想要实现的目标和原因。

我有一个存储对象统计信息的类:名称,级别,速度,大小等。 应该通过方法StatData getStat(string statName);

访问它们

通过方法void MakeStat()创建统计信息。当一些统计数据在类中创建为公共变量并且由其他类别访问而不是通过getStat()方法访问时,问题就开始了。

现在公用变量已更改,已删除或添加了新变量,需要进行一些重构才能让应用再次运行。当存在直接访问公共变量的混合调用和同一事物的方法时,它看起来很糟糕。

请注意,我知道如何以标准方式修复我的代码;如果上述技术可行,我只是感兴趣。

1 个答案:

答案 0 :(得分:1)

听起来像DynamicObject会帮助你。对于该对象上调用/访问的任何内容,您可以覆盖该类的不同方法:成员,调用等。但是,使用动态意味着您将无法再使用intellisense。您可以找到更多信息here

public class MyDynamicObject : DynamicObject {
    public override bool TryGetMember(GetMemberBinder binder, out Object result){
        if (binder.Name == "myVar"){
            result = "xyz";
            return true;
        }           

        result = null;
        return false;
    }
}

// Usage
dynamic x = new MyDynamicObject();
Console.WriteLine (x.myVar); // will output "xyz"