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

Posted

技术标签:

【中文标题】如何在c#中访问另一个类中的一个类的私有函数?【英文标题】:How to access private function of a class in another class in c#? 【发布时间】:2014-01-02 20:28:42 【问题描述】:

我是 C# 编程新手,我知道类的公共数据成员可以从另一个类访问。有什么方法可以从另一个类访问私有函数?

这是我尝试过的。请帮帮我。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication7

    class Program
    
        private class Myclass
        
            private int Add(int num1, int num2)
            
                return num1 + num2;
            
        
        static void Main(string[] args)
        
            Myclass aObj = new Myclass();
            //is there any way i can access private function
        
    

【问题讨论】:

为什么不能把它变成public 函数? 为什么!!!!!!你有什么问题? 为什么要访问私有方法?你到底想完成什么? 显然 Srividhya 编造了一个简单的例子来确保他的问题可以被理解。假设他不想实际执行 Add(1, 2),因为这样 1 + 2 可能会起作用。 【参考方案1】:

您可以通过反射,但为什么要这样做?

【讨论】:

【参考方案2】:

您好,您可以使用反射来获取类的任何组件。

这是一个演示。试试看

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ExposePrivateVariablesUsingReflection

    class Program
    
        private class MyPrivateClass
        
            private string MyPrivateFunc(string message)
            
                return message + "Yes";
            
        

        static void Main(string[] args)
        
            var mpc = new MyPrivateClass();
            Type type = mpc.GetType();

            var output = (string)type.InvokeMember("MyPrivateFunc",
                                    BindingFlags.Instance | BindingFlags.InvokeMethod |
                                    BindingFlags.NonPublic, null, mpc,
                                    new object[] "Is Exposed private Member ? ");

            Console.WriteLine("Output : " + output);
            Console.ReadLine();
        
    

【讨论】:

谢谢@kumarch1。我得到了答案。 它被称为反射。【参考方案3】:

除了使用反射,你不能。事实上,成员被设为private,所以他们不能从类外部访问。

【讨论】:

可能是有点奇怪的语言,“事实上”。【参考方案4】:

根据我在您的代码中看到的,我认为您想要的是拥有一个可访问的 Add 函数。

如果它是你想要的,你不需要类,只需将你的 Add 函数放在你的 Program 类中并使其成为 static

如果你真的需要你的类,那么你应该问自己一个问题:我编写的函数是否设计为可在类外部访问,还是应该只在我的类内部调用。

如果第一个问题的答案是肯定的,则将其公开。

这是一个设计问题,所以你应该关注这个。

即使您可以使用反射来访问它,也很少有这样的事情是一件好事。反射是最后的手段,如果你能用其他方式做到,你应该使用其他方式。

【讨论】:

以上是关于如何在c#中访问另一个类中的一个类的私有函数?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何在另外一个类中访问Form中控件属性?

如何访问其子类中的类的私有变量?

如何在PHP中访问另一个类的私有函数[重复]

如何在另一个类的函数中访问一个类的变量?

如何在C#中,在一个类里调用另外一个类的方法

如何在c#中访问内部类中的外部类的变量[重复]