У меня возник вопрос о универсальном методе.Возврат определенного типа из общего метода
Предположим, что я создаю игру с пользовательским интерфейсом, и у нее есть класс 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
и наследование от него. Спасибо!
никогда не слышал о 'where' заявление в C#, спасибо! – SirusDoma
@ChronoCross Поиск общих ограничений типов – fahadash