Такой дизайн кажется мне неуклюжим. Вы контролируете код, поэтому то, что вы просите сделать, на самом деле не нужно, если вы не разрабатываете какой-то фреймворк / API. Если класс не должен иметь возможность изменять свойство, не изменяйте свойство или не предоставляйте установщик.
Может быть, если вы сможете объяснить немного больше о том, что или почему вам нужно сделать это, чтобы помочь нам понять лучший подход, чтобы обеспечить вас для вашей цели здесь.
Простой пример использования базового наследования
// Class used to read and write your data
public class DataBuilder : Data {
public void SetValue(int value) {
base.m_SomeValue = value; // Has access to protected member
}
}
// Class used to store your data (READONLY)
public class Data {
protected int m_SomeValue; // Is accessible to deriving class
public int SomeValue { // READONLY property to other classes
// EXCEPT deriving classes
get {
return m_SomeValue;
}
}
}
public class AnyOtherClass {
public void Foo() {
DataBuilder reader = new DataBuilder();
Console.WriteLine(reader.SomeValue); // *CAN* read the value
reader.SomeValue = 100; // CANNOT *write* the value
}
}