Я хочу, чтобы мои наследники содержали свойство Propy , поэтому я разработал следующее.
public interface Enforcer
{
string Propy { get; set; }
}
Между интерфейсом и реальными классами мне нужно использовать абстрактную базукласс для принудительного применения подписи конструктора.Затем класс реализатора и класс-наследник выглядят так:
public class Implementer : Enforcer
{
public string Propy { get; set; }
public Implementer(string propy) { Propy = propy; }
}
Теперь, если я создаю экземпляр этого класса, у меня есть произвольный доступ к свойству, которое я хочу ограничить.Я не могу объявить сеттер как частный или защищенный, потому что модификаторы доступности не могут использоваться на методах доступа в интерфейсе.Я не могу сделать свойство полностью приватным, потому что мне нужно получить к нему доступ (конечно, только для чтения) в классе бегуна.
public class Inheritor : Implementer
{
public Inheritor(string propy) : base(propy) { }
}
public class Instantiator
{
public void Main()
{
Inheritor thing = new Inheritor("blopp");
string propy = thing.Propy;
thing.Propy = "bzz";
}
}
Я хочу, чтобы последнее утверждение было недействительным, но не второе последнее,Я погуглил свою задницу, но я предполагаю, что это немного необычный сценарий (который может быть обработан небрежно, просто позволяя собственности быть публичной и надеясь, что пользователи уважают границы..