如何在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#中访问另一个类中的一个类的私有函数?的主要内容,如果未能解决你的问题,请参考以下文章