Ответ 1
Создайте базовый базовый интерфейс. Например:
public interface IEditor {}
public interface IEditor<T> : IEditor ... {}
Затем проверьте IEditor
.
У меня есть интерфейс под названием IEditor
public interface IEditor<T>
where T: SpecialObject
SpecialObject
- абстрактный класс.
Вот моя проблема:
У меня есть класс, который наследует от SpecialObject
и представление, которое реализует этот интерфейс IEditor
public class View : IEditor<Person>
Теперь, я должен проверить, реализует ли View IEditor<SpecialObject>
Boolean isEditor = View is IEditor<SpecialObject>
Но IEditor
всегда false
Есть ли возможность проверить, является ли View IEditor<SpecialObject>
?
У меня есть метод, который вызывается, когда возникает событие закрытия. Представления, которые передаются этому методу, могут реализовать IEditor, но они также могут реализовать другой интерфейс. В примере IView
void Closing(object sender, MyEventArgs e)
{
if(e.Item is IView)
{
// DO some closing tasks
if(e.Item is IEditor<SpecialObject>) // always false
{
// Do some special tasks
var editor = e.Item as IEditor<SpecialObject>;
var storedEditObect = editor.StoredObject;
// more tasks
}
} else if(e.Item is ISomeOtherView)
{}
}
У меня есть классы, называемые Person, Address и т.д. Все они наследуются от SpecialObject. В некотором случае e.Item наследует от IEditor или IEditor Из-за этого мне нужно передать в базовый класс доступ к полям свойств defaut
Создайте базовый базовый интерфейс. Например:
public interface IEditor {}
public interface IEditor<T> : IEditor ... {}
Затем проверьте IEditor
.
Ваша проблема - общая дисперсия. Например, IList<MemoryStream>
не является IList<Stream>
.
Как и на С# 4, вы можете сделать свой ковариантный интерфейс следующим образом:
public interface IEditor<out T> where T: SpecialObject
В этот момент IEditor<Person>
будет IEditor<SpecialObject>
, но это будет работать, только если ваш интерфейс использует T
в позиции "out".
Если это возможно для вас, это, вероятно, более чистое намерение, чем базовый интерфейс leppie non-generic, но это хорошая альтернатива, когда ковариация не подходит.