如何访问嵌套类中的私有类方法

Posted

技术标签:

【中文标题】如何访问嵌套类中的私有类方法【英文标题】:How to access private class method in nested class 【发布时间】:2014-08-25 10:12:48 【问题描述】:

如何在此处访问方法DoSomething()?当我创建SomeClass 类型的对象时,我无法访问它。

另一方面,在公共类中包含私有类有什么用?

public class SomeClass

    public string str = string.Empty;

    private class SomePrivateClass
    
        public void DoSomething()
        
            ...
        
    

【问题讨论】:

您可以通过SomeClass 的方法访问DoSomething(使用SomePrivateClass 的实例)。 dotnetfiddle.net/dh62Hk Private inner classes in C# - why aren't they used more often? 由于您将问题标记为 OOP - 当您打算访问嵌套类型的成员时,通常建议不要使用嵌套类型。 您想从哪里访问 DoSomething?来自某类?或者您是否尝试从完全不同的类访问它? 【参考方案1】:

你需要在外部类里面创建嵌套类的对象:

public class SomeClass

    public string  str= string.Empty;

    private class SomePrivateClass
    
         public void DoSomething()
         

         
    
    public void CreateObjectOfSomePrivateClass()
    
        SomePrivateClass obj = new SomePrivateClass();
        obj.DoSomething();
    

【讨论】:

【参考方案2】:

DoSomething 是一个 instance 方法和一个public 方法,这意味着任何可以访问该类型(类)定义的代码实际上都可以调用该方法。而且由于SomePrivateClassSomeClass的私有类,那么它只能在withinSomeClass进行实例化。您应该集中精力阅读更多关于静态成员和实例成员之间区别的信息(例如this MSDN article)。

话虽如此,私有类可以做的一件事是访问父类的私有字段(实例和静态,但同样你需要有一个实例 的父类,以便调用其实例方法),而其他类不能。

【讨论】:

Nitpick:“任何可以实例化该类型对象的代码”——或者更准确地说,任何可以获取该类型实例的代码(即使它本身不能实例化该类型) . @O.R.Mapper:是的,这是正确的,或者甚至更好,只要类定义对客户端代码可见,因为您可以通过以下方式轻松获取私有或内部类的实例完全不需要公开方法的公共接口或其基类型。

以上是关于如何访问嵌套类中的私有类方法的主要内容,如果未能解决你的问题,请参考以下文章

如何访问嵌套类的私有成员?

如何在c#中访问另一个类中的一个类的私有函数?

无法访问junit测试类中的包私有方法

私有的嵌套类(内部或静态)是不是可能具有具有公共访问权限的方法?

如何调用内部类中的静态方法

ZeroC ICE源代码中的那些事 - 嵌套类和局部类