如何确保只能从特定类调用类的方法?

时间:2016-03-13 10:15:27

标签: c# oop

public class A
{
    private void MethodA(){}
}

public class B
{
    private void MethodB() { }
}

public class C
{
    private void MethodC() { }
}

我想确保只能从MethodA调用MethodB。其他方法永远不能调用MethodA

2 个答案:

答案 0 :(得分:3)

使MethodA受到保护,并使用这样的继承:

public class A
{
    protected void MethodA()
    {
    }
}

public class B : A
{
    private void MethodB()
    {
        //MethodA is accessible just here
    }
}

public class C
{
    private void MethodC()
    {
        //MethodA is not accessible here
    }
}

但是,如果您不想使用继承并希望相同程序集中的所有类,则只能在类B中嵌套类A并保持MethodA私人。像这样:

public class A
{
    private void MethodA()
    {
    }
    public class B
    {
        private void MethodB()
        {
            A a = new A();
            a.MethodA();
        }
    }
}

public class C
{
    private void MethodC()
    {
        //MethodA is not accessible here
    }
}

public class D : A
{
    private void MethodC()
    {
        //MethodA is not accessible here
    }
}

答案 1 :(得分:2)

我注意到S.Akbari的回答虽然不错,但并不完全符合您的要求。您说您希望MethodA仅在B内可调用,但在答案中,MethodA可在A内调用。

您实际提出的问题的解决方案是反转嵌套:

class B
{
  private class A
  {
    public void MethodA() { }
  }
}

现在只能在MethodA内调用B

但问题很奇怪。如果您的方法只能从B调用,那为什么它不是B的成员?