如何将类成员限制为只有一个其他类

时间:2013-12-04 18:37:05

标签: c# class

我想从另一个类(Class1)访问Class2中的类成员,但我想从该类访问它,并禁止从任何其他类,表单等访问它。有没有办法做到这一点?

6 个答案:

答案 0 :(得分:3)

执行此操作的唯一方法是嵌套类,然后将数据设为私有:

public class Class1
{
    private object data;
    public class Class2
    {
        public void Foo(Class1 parent)
        {
            Console.WriteLine(parent.data);
        }
    }
}

答案 1 :(得分:1)

您可以将嵌套类与private范围一起使用:

public class Class2
{
    public Class2()
    {
        Class1 c1 = new Class1();
        Console.WriteLine(c1.Id);
    }                

    private class Class1
    {
        public int Id { get; set; }
    }
}

答案 2 :(得分:1)

实际上,你可以通过一些横向思维来做到这一点。一种方法是在Class1上创建一个接受Class2实例的方法,并返回委托以访问标记为private的成员。然后将Class2声明为密封,以防止有人潜入继承。

另一种方法是使用每个成员中的StackFrame检查调用堆栈(字段为此),如果调用者不是所需类型,则抛出异常。

主知道。为什么你这样做呢! :)

答案 3 :(得分:0)

你想要一个等同于“朋友”的c#,但实际上没有。这个previous question 提供了可能的解决方案。

答案 4 :(得分:0)

您可以创建一个界面,公开属性以访问您的私有成员。并明确地实现它。比在其他类中使用该接口。 第二种方式是使用反射。 3-rd是嵌套类。

答案 5 :(得分:0)

你可以实现一个属性

[IsAllowed(true)]
public class a
{

}

然后在您的方法中,您可以更改需要该实例的每个方法的符号。

public class b {
   public void method ( object aClassInstace){
     .... Here check the property
   }
}