Можно ли реализовать интерфейс в базовом классе и разрешить вызов/переопределение реализованного метода на первом уровне производного класса, но предотвратить его вызов из любых других производных классов?
public interface IInterfaceSample
{
bool Test();
}
public class Base: IInterfaceSample
{
public virtual bool Test()
{
return True;
}
}
public class Sub1: Base
{
//I need to be able to override the Test method here
public override bool Test()
{
return True;
}
}
//Under a separate project:
public class Sub2: Sub1
{
//I need to prevent overriding the interface implementation in this class
}
Теперь мне нужно это:
var b = new Base();
b.Test();//This should work
var s1 = new Sub1();
s1.Test();//I need this to work too
var s2 = new Sub2();
s2.Test();//I need to prevent doing this
Пока что это далеко от исследований, я думаю, что это может быть невозможно, потому что интерфейсы должны быть общедоступными, иначе их использование не имеет реальной ценности.
В моем случае мне нужно, чтобы класс Sub2 имел доступ к свойствам в Sub1, но только это, и не имел доступа к методам этого класса и особенно к методам реализации интерфейса.
Единственный способ, которым я смог это сделать, — вообще не использовать интерфейсы и сделать это так:
public class Base
{
internal virtual bool Test()
{
return True;
}
}
public class Sub1: Base
{
//I am able to override the Test method here
internal override bool Test()
{
return True;
}
}
//Under a separate project:
public class Sub2: Sub1
{
//Nothing to override here which is what i need
}
var b = new Base();
b.Test();//This works
var s1 = new Sub1();
s1.Test();//This works too
var s2 = new Sub2();
s2.Test();//This is prevented
Однако мне интересно, доступно ли это по-прежнему для достижения с помощью интерфейсов, любая помощь очень ценится.
Sub2
методу, который может принять любой экземплярBase
? - person Trevor Pilley   schedule 19.03.2015