Как скрыть статический метод - PullRequest
2 голосов
/ 26 января 2011

Допустим, у меня есть такие классы:

class A
{
   public static int Count()
}
class B : A
{
}
class C : A
{
}

Как я могу скрыть этот статический метод для класса B, но не для C?

Ответы [ 3 ]

9 голосов
/ 26 января 2011

Вы не можете, в основном. Черт возьми, если это общедоступно, то любой может позвонить.

Вы можете сделать его защищенным, что позволит вызывать его изнутри B или C, но не из других мест ... но вы все равно не сможете различить B и C.

0 голосов
/ 26 января 2011

Единственным решением было бы изменить иерархию классов. Это не стоит хлопот и моментов WTF, которые вы получите в обзорах кода, если вы спросите меня.

class ABase
{
}
class A
{
   public static int Count()
}
class B : ABase
{
}
class C : ABase
{
}
0 голосов
/ 26 января 2011

Вы могли бы сделать это, создав другой класс, назовем его Special, который наследует A. Затем вы должны сделать так, чтобы C наследовал от Special, а B наследовал от A. Кроме того, у вас был бы защищенный статический метод, то есть только классы, которыеУнаследованный Special будет иметь к нему доступ.

class A
{
}
class Special : A
{
    protected static int Count()
}
class B : A
{
}
class C : Special
{
}
...