Это похоже на другую тему я недавно опубликовал, но, возможно, это может быть проще и понятнее:C# вентиляционный общий тип интерфейс
Я хочу, чтобы выполнить следующие действия (или что-то очень похожее) ...
IManageableEntryDao<IManageableEntry> dao = new CompanyNameDao();
... со следующими классами:
public interface IManageableEntry {
string Name { get; set; }
}
public class CompanyName : IManageableEntry {
public string Name { get; set; }
}
public interface IManageableEntryDao<T> where T : IManageableEntry {
}
public class CompanyNameDao : IManageableEntryDao<CompanyName> {
}
Если я пытаюсь сделать бросок as IManageableEntryDao<IManageableEntry>
, я получаю нуль.
Значит, это не выполнимо в C# 3.5? –
К сожалению, нет. По крайней мере, не напрямую. Вам нужно будет найти обходное решение, например. создание 'CompanyNameDao' наследуется от' IManageableEntryDao '; это ваш звонок. –
univerio
Правильно, это менее элегантно, потому что CompanyNameDao возвращает объекты IManageableEntry, а не объекты CompanyName. –