如果类声明为私有,并且其成员是公开,那么相关类的可访问性是什么?
答案 0 :(得分:1)
如果私有类实现某些接口,则可以通过该接口访问公共方法。这是一段代码:
public interface ITest
{
void Test();
}
public class Program
{
public static void Main()
{
ITest nestedProgram = new NestedProgram();
AnyOtherClass otherClass = new AnyOtherClass();
otherClass.AnyMethod(nestedProgram);
}
private class NestedProgram : ITest
{
public void Test()
{
Console.WriteLine("Test method invoked");
}
}
}
public class AnyOtherClass
{
// won't compile
// public void AnyMethod(Program.NestedProgram test)
public void AnyMethod(ITest test)
{
// won't compile
//ITest nestedProgram = new Program.NestedProgram();
test.Test();
}
}
答案 1 :(得分:0)
访问修饰符是用于指定成员或类型的声明可访问性的关键字。
公共修饰符
public关键字是类型和类型成员的访问修饰符。公共访问是最宽松的访问级别。
访问公共成员没有任何限制。
可访问性
可以被该类的对象访问
可以被派生类访问
私人访问权限是最低的访问权限级别。
私有成员只能在声明它们的类或结构体中访问。
可访问性
不能被对象访问。
派生类无法访问。
现在,如果将该类声明为私有并且其成员是公共的,那么让我们来找到确切的答案,因为无法继承私有类,所以成员的可访问性级别将保留在该类之内。
答案 2 :(得分:0)
该类就是您声明的类。类声明中的“ private”修饰符对嵌套类很重要,但是没有阻止其嵌套的类使用其公共成员的方法。我认为这两者并不是特别相关,因为它们的目标略有不同(一个是类本身对实例化的可见性,可以在何处进行引用,另一个是可以访问哪些成员)。
也请考虑以下示例:
public interface ITest
{
void TestMethod();
}
public static class TestFactory
{
private class Test: ITest
{
public void TestMethod() { }
}
public static ITest CreateTest()
{
return new Test();
}
}
示例:
TestFactory.Test a = new TestFactory.Test(); // doesn't work because the class is private
TestFactory.Test b = null; // also doesn't work because the class is private
ITest c = null; // works, the interface is public
ITest d = TestFactory.CreateTest(); // works, because the interface is public and CreateTest is declared to return the interface.
在此示例中,只有TestFactory
可以看到该类以创建其实例。另一方面,返回值是public接口,它声明实现者应该具有公共方法TestMethod();
在这种情况下,该方法必须是公开的。尽管只有TestFactory可以直接实例化并查看类,但仍可以通过接口(或基类)公开它。
无论如何,最好看看docs。