C# 类是私有的,成员是公共的。它的范围是什么?

C# 类是私有的,成员是公共的。它的范围是什么?,c#,C#,如果类声明为私有且其成员为公共,那么相关类的可访问性是什么?访问修饰符是用于指定成员或类型的已声明可访问性的关键字 公共修饰语 public关键字是类型和类型成员的访问修饰符。公共访问是最允许的访问级别 访问公共成员没有限制 可达性 可以由类的对象访问 可以由派生类访问 私有访问是最低权限的访问级别 私有成员只能在声明它们的类或结构体中访问 可达性 无法由对象访问 无法由派生类访问 现在,让我们得出确切的答案:如果类被声明为private,并且其成员是public的,那么成员的可访问性级别将保留

如果类声明为私有且其成员为公共,那么相关类的可访问性是什么?

访问修饰符是用于指定成员或类型的已声明可访问性的关键字

公共修饰语

public关键字是类型和类型成员的访问修饰符。公共访问是最允许的访问级别

访问公共成员没有限制

可达性

可以由类的对象访问

可以由派生类访问

私有访问是最低权限的访问级别

私有成员只能在声明它们的类或结构体中访问

可达性

无法由对象访问

无法由派生类访问


现在,让我们得出确切的答案:如果类被声明为private,并且其成员是public的,那么成员的可访问性级别将保留在类中,因为private类不能被继承。

该类就是您声明的类。类声明中的“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可以直接实例化和查看该类,但它仍然可以通过接口(或基类)公开


无论如何,最好看一看。

如果您的私有类实现了一些接口,那么您可以通过该接口访问公共方法。下面是一段代码:

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();
    }
}

阅读此=>以回答您的特定问题-一个
私有类
私有的
-无论其成员的可见性如何。这确实感觉有点像XY问题-。你能告诉我们你为什么要问这个问题吗?类没有“作用域”(C#中的作用域是为变量定义的)。。。类和方法具有“可访问性”(由
private
/
public
修饰符定义)。你能用合适的术语更新你的帖子,并澄清你所说的“相关类”是什么(听起来像其他类型)?小的代码示例会有很大帮助。如果一个公众人物进入了一个私人俱乐部,这个人对俱乐部以外的人仍然有效吗?OP特别要求将私人类和公共方法相结合