OriginalGriff
Вы не можете выбрать, какие классы могут наследовать базовый класс или какие его "части" они наследуют, кроме как с помощью private (нет доступа), protected (любой производный класс), internal (только в пределах одной сборки), private protected (производный, но должен быть в одной сборке - c#7.2 и далее) в качестве модификатора доступа для класса / свойств.
Хотя... есть только один способ обмануть. Если вы тщательно кодируете свои свойства / методы, вы можете создать исключение времени выполнения, если класс доступа не является "совместимым"
public interface IDontThrowException { }
public class IsAllowed : MyClass, IDontThrowException { }
public class IsntAllowed : MyClass { }
Тогда в вашем классе
private int result = 666;
public int GetIfAllowed
{
get
{
if (!(this is IDontThrowException)) throw new ApplicationException("Not allowed");
return result;
}
}
private void MyButton_Click(object sender, EventArgs ew)
{
MyClass allowed = new IsAllowed();
MyClass notAllowed = new IsntAllowed();
Console.WriteLine(allowed.GetIfAllowed); // Fine
Console.WriteLine(notAllowed.GetIfAllowed); // Throws an exception.
Это отвратительный способ делать вещи, но.....