Мое предложение было бы создать интерфейс, который "переопределяет" нужные вам свойства:
Допустим, у вас есть два интерфейса:
public interface IHasName1
{
String Name1 { get; set; }
}
public interface IHasName2 : IHasName1
{
String Name2 { get; set; }
}
И класс, который реализует IHasName2:
public class HasTwoNames : IHasName2
{
#region IHasName1 Member
public string Name1 { get; set; }
#endregion
#region IHasName2 Member
public string Name2 {get; set; }
#endregion
}
Теперь, спасибо за выяснение этого, между прочим, если у вас есть список с объектами конкретного типа HasTwoNames и вы связываете этот список с dgv, он отображает только члена (Name2) IHasName2.
«Обходной путь» - создать новый интерфейс «IHasEverything», который наследуется от IHasName2 и, следовательно, от IHasName1 и переопределяет свойства Propertys, необходимые для привязки (вы можете сделать это с помощью нового оператора
public interface IHasEverything : IHasName2
{
new String Name1 { get; set; }
new String Name2 { get; set; }
}
Теперь ваш конкретный класс "HasTwoNames" должен также реализовать IHasEverything:
public class HasTwoNames : IHasName2, IHasEverything
{
...
}
Вы можете связать этот список с сеткой данных:
public List<IHasEverything> elements = new List<IHasEverything> {
new HasTwoNames { Name1 = "Name1", Name2 = "Name2"},
new HasTwoNames { Name1 = "Name3", Name2 = "Name4"},
};
Я знаю, что это всего лишь обходной путь, и он возможен только в том случае, если вы можете изменить класс реализации. Но это работает.
(Если вы удалите свойство из IHasName2, код все равно будет скомпилирован, но вы получите предупреждение о том, что IHasEverything не нуждается в новом ключевом слове.