将随机对象传递给函数

时间:2014-07-31 16:53:39

标签: c# reflection

我需要将一些不同的对象(不同的类)作为参数传递给同一个函数。我不知道如何在这里定义我的功能。我应该只使用“Object obj”作为参数,还是使用反射或泛型有更好的方法?

public void Execute (string query, Object obj) {}

编辑:

使用@Lame_coder Idea,我使用了我的Base classe实现了一个具有fct GetStringParmeters()的接口,该接口使用了反射(而不是每个类都有自己的GetStringParmeters()fct)

public Dictionary<string,string> GetStringParmeters()
    {
        Dictionary<string, string> parameters = new Dictionary<string, string>();
        Type obj = this.GetType();            
        foreach (var prop in obj.GetProperties())
        {
            if(prop.PropertyType == typeof(string))
            {                    
                parameters.Add(prop.Name, (string)prop.GetValue(this, null));
            }
        }
        return parameters;
    }

全部谢谢

3 个答案:

答案 0 :(得分:2)

您可以使用Generics。这样,您可以将此方法重用于多个对象类型,而不会产生重载。

public void Execute<T>(string query, T obj)
{
}

答案 1 :(得分:2)

真正取决于您的用例。你可以做以下几点之一:

  • 如果可能,您的类可以从母类继承,然后您的方法可以将父类作为参数
  • 同样,您的类也许可以实现相同的接口 - IMyInterface,然后该方法可以将IMyInterface类型的对象作为参数
  • 使用泛型并相应地重新定义您的方法

就像我说的,这实际上取决于你究竟需要做什么。

答案 2 :(得分:0)

你问过&#34;有没有更好的方法使用反射?&#34;

从您给出的示例方法签名看起来反射将是一种矫枉过正。您应该创建一个@drazmazen建议的接口,并按照您希望传入的类型实现。您可以使用一种常用的方法来说“getParameters&#39;您可以在实现界面时实现,然后您的方法可以使用它。

public interface IMother
{
   string[] GetParameters();
}

public class ChildOne:IMother
{
   public string[] GetParameters()
   {
     //build output
     return;
   }
}
public class ChildTwo:IMother
{
   public string[] GetParameters()
   {
     //build output
     return;
   }
}

然后你的执行方法可能是

public void Execute (string query, IMother obj) 
{
   //get needed information
   var queryParams = obj.GetParameters();

   //use it further for your code.
}