【问题标题】:How to access private function of a class in another class in c#?如何在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 可能会起作用。

标签: c# function class private access-specifier


【解决方案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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 2020-09-02
      • 1970-01-01
      • 2013-04-02
      • 2012-05-01
      • 1970-01-01
      • 2019-04-18
      相关资源
      最近更新 更多