Вы можете использовать синтаксис свойства. Используйте эту комбинацию:
interface ISomething
{
string Test { get; }
}
class Something : ISomething
{
public string Test { get; private set; }
}
Конечно, вы можете добавить полные реализации для получателей в Something.Test, если захотите. Я использовал только вспомогательные поля для краткости.
Помните, что интерфейс определяет минимальный набор вещей, которые вы должны реализовать. Вы можете добавить любую подливку (новые методы, средства доступа, члены и т. Д.) Поверх того, что вы хотите. Вы даже можете добавить публичный сеттер:
interface ISomething
{
string Test { get; }
}
class Something : ISomething
{
public string Test { get; set; } // Note that set is public
}
Единственным ограничением является то, что кто-то не может использовать добавленную вами соус, если у него нет ссылки на конкретный тип (класс, а не интерфейс) или другой интерфейс, который определяет добавленные вами методы.