我对泛型方法有疑问。
假设我正在创建一个带有自定义UI的游戏,它有ResourceManager
个类。
有方法从ResourceManager
获取对象并返回泛型类型,这里是类代码:
public class ResourceManager
{
// The list that store the object
private List<Control> _objects = new List<Control>();
// Add object into the list
public void Add(params Control[] objects)
{
_objects.AddRange(objects);
}
// Get the object from the list
public T GetObject<T>(string name)
{
try
{
foreach (Control obj in _objects)
{
if (obj.Name == name)
return (T)Convert.ChangeType(obj, typeof(T));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return default(T);
}
}
如您所见,对象是Control
类。
在我的项目中,很少有类继承这个类,让我们说它是Button
,Image
和CheckBox
我打电话时代码运行顺畅:
CheckBox checkBox = ResourceManager.GetObject<CheckBox>("CheckBox1");
Control control = ResourceManager.GetObject<Control>("Control1");
问题是,它接受任何类型,例如:
string str = ResourceManager.GetObject<string>("blablabla1");
int num = ResourceManager.GetObject<int>("blablabla2");
我只是希望代码在类型不是Control
及其继承时不会编译。
谢谢!
答案 0 :(得分:5)
添加约束public T GetObject<T>(string name) where T:Control