我有一个私有静态类,我试图从SomePrivateClass访问AddtwoNum()
方法到C#中的SomePublicClass,并且不允许我这样做。
class SomeClass
{
private static class SomePrivateClass
{
public static void AddtwoNum(int num1, int num2)
{
//do some stuff here
}
}
class SomePublicClass
{
SomePrivateClass.AddtwoNum(); //Error: The name AddtwoNum does not exist in the current context.
// how to call AddtwoNum() method here???
}
}
答案 0 :(得分:1)
您可以使用Reflection来做到这一点,但我宁愿避免调用私有成员,因为它打破了封装并依赖于内部实现细节。这会使你的代码不那么稳定。
您的代码可能如下所示:
代码看起来像这样:
[TestMethod]
public void TestMethod1()
{
var type = Assembly.GetExecutingAssembly().GetType("ClassLibrary2.SomeClass");
var nestedType = type.GetNestedType("SomePrivateClass", BindingFlags.NonPublic);
var method = nestedType.GetMethod("AddtwoNum", BindingFlags.Static | BindingFlags.NonPublic);
method.Invoke(null, new object[] { default(int), default(int) });
}
答案 1 :(得分:0)
这样,它对我有用:
class SomeClass
{
private static class SomePrivateClass
{
public static int AddtwoNum(int num1, int num2)
{
return num1 + num2;
}
}
class SomePublicClass
{
private int x = SomePrivateClass.AddtwoNum(1, 2);
public void InteractWithSomePrivateClass()
{
SomePrivateClass.AddtwoNum(1,2); //no problem
}
}
}
相同的命名空间,相同的程序集,私有的尊重。
私人成员只能在班级或团体内访问 声明它们的结构。
因此,在“SomeClass”类的主体内,类“SomePrivateClass”是已知的。
“SomePublicClass”类位于“SomeClass”类的主体内,因此它也知道“SomePrivateClass”。
注意:SomeClass实际上不是成员,但无论如何定义都适用。 Here is a more general statement:
private:类型或成员只能通过相同的代码访问 类或结构。
答案 2 :(得分:0)
我知道这不是你想要的,但为什么不将SomePrivateClass标记为内部而非私有。然后该类只在程序集中可见。