我想从另一个类(Class1
)访问Class2
中的类成员,但我想从该类访问它,并禁止从任何其他类,表单等访问它。有没有办法做到这一点?
答案 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
}
}