我需要将一些不同的对象(不同的类)作为参数传递给同一个函数。我不知道如何在这里定义我的功能。我应该只使用“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;
}
全部谢谢
答案 0 :(得分:2)
您可以使用Generics
。这样,您可以将此方法重用于多个对象类型,而不会产生重载。
public void Execute<T>(string query, T obj)
{
}
答案 1 :(得分:2)
真正取决于您的用例。你可以做以下几点之一:
就像我说的,这实际上取决于你究竟需要做什么。
答案 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.
}