Пожалуйста, помогите мне понять это. У меня есть вид завода, который выглядит как этотДоступ к свойствам объекта, присвоенного var
public static class FactoryForAnything
{
public static object GetInstanceOf<T>() where T : class
{
return Activator.CreateInstance(IsType<T>(), true);
}
private static Type IsType<T>()
{
if (typeof(T).IsSubclassOf(typeof(EntityBaseSupertype)) == true)
{
return typeof(T);
}
else if (typeof(T).IsSubclassOf(typeof(ValueObject<>)) == true)
{
return typeof(T);
}
else
return null;
}
Намерение принимает класс в качестве параметра и возвращает объект этого класса
EntityBaseSupertype hon =(EntityBaseSupertype) FactoryForAnything.GetInstanceOf<User>();
var hon = FactoryForAnything.GetInstanceOf<User>();
Calling завод с EntityBaseSupertype получает меня объект и на него ссылается абстрактный базовый класс всех объектов, поэтому я могу получить доступ к файлам/свойствам/членам объекта. Вызов фабрики с var получает меня объект, но он не дает мне доступ к полям/свойствам и так далее. Я понимаю, что это уродливый дизайн, и он не будет использоваться, но мой вопрос заключается в том, почему я не могу обращаться к объекту с помощью var? Почему?
Потому что ... ваш метод возвращает 'object'? Попросите его вернуть 'T' (вам, конечно, нужно сделать явное приведение). – Luaan
Я не уверен, но вы можете заставить ограничение иметь пустой конструктор с 'new()', а затем использовать его для экземпляра вашего типа T. –