我是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
}
}
}
答案 0 :(得分:7)
您好,您可以使用反射来获取类的任何组件。
这是一个演示。试试吧
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();
}
}
}
答案 1 :(得分:7)
除了使用反射,你不能。事实上,成员完全private
,所以他们不能从课外访问
答案 2 :(得分:1)
从我在代码中看到的内容来看,我认为你想要的是拥有一个可访问的Add
函数。
如果它是您想要的,那么您不需要课程,只需将Add
功能放在Program
课程中,然后将其设为static
。
如果你真的需要你的课程,那么你应该问自己一个问题:我编写的函数是为了在课堂外可以访问,还是应该只在我的课堂内调用。
如果第一个问题的答案是肯定的,那么将其公之于众。
这是一个设计问题,因此您应该专注于此。
即使你可以使用反射来访问它,但是很少有这种情况可以做到。反思是最后的选择,如果你能以另一种方式做到,你应该用另一种方式。
答案 3 :(得分:-2)
你可以通过反思,但为什么要这样做呢?