Если в некоторых реализациях будут реализованы только некоторые части интерфейса, было бы неплохо разделить интерфейс на части, которые каждая реализация будет реализовывать полностью или не реализовывать вовсе, а затем определить интерфейсы, которые наследуют все общие комбинации.из них.Адаптируем ваш пример:
interface IMyReadableInterface
{
int property { get; }
}
interface IMyFullInterface : IMyReadableInterface
{
new int property { get; set; }
}
Классы, которые хотят поддерживать доступ для чтения и записи, должны реализовывать IMyFullInterface;Те, которые хотят поддерживать только чтение, должны реализовывать только IMyReadableInterface.Эта сегрегация не потребует дополнительной работы для реализаций любого интерфейса, которые написаны на C # и неявно реализуют property
.Код, который реализует property
в VB или явно реализует property
в C #, должен определять две реализации property
- только для чтения и чтения-записи, но такова жизнь.Обратите внимание, что хотя можно определить IMyWritableInterface
, у которого только что был установщик, и IMyFullInterface
наследует IMyReadableInterface
и IMyWritableInterface
, IMyFullInterface
все равно придется определять собственное свойство чтения-записи, и когдаиспользуя явную реализацию, нужно было бы определить три свойства (я действительно не понимаю, почему C # не может использовать свойство только для чтения и только для записи, так как считал, что это свойство для чтения и записи,но не может).