例子:

namespace MyProgram.Testing
{

    public class Test1
    {
        public void TestMethod()
        {
            String actualType = this.GetType().FullName.ToString();
            return;
        }

        public static String GetInheritedClassName()
        {
            return System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName;
        }

    }

    public class Test2 : Test1
    {
    }

    public class Test3
    {
       String test2ClassName = Test2.GetInheritedClassName();
    }
}

无论如何,我希望它返回“MyProgram.Testing.Test2”,但相反,Test2.GetInheritedClassName()返回“MyProgram.Testing.Test1”。我必须在该静态类中放入什么才能使其返回(如果可能的话)?

最佳答案

输出类型的代码是基类方法。除了上面提供的罕见的反射方案外,执行该方法不会受到使用派生类型还是基类型调用该方法的影响,因此系统没有区别。

但是,您可以通过定义通用基本类型来解决此问题:

类ClassNameTesterBase ,其中T:ClassNameTester
{
公共(public)静态字符串getName(){return(typeof(T))。Name; }
}

然后定义其他感兴趣的类型:

class ClassNameTester1 :ClassNameTesterBase ...
类ClassNameTester2 :ClassNameTester1 ...

然后,如果需要,可以定义叶子类:

class ClassNameTester1:ClassNameTester1 {}
class ClassNameTester2:ClassNameTester2 {}

这里有一点需要注意的是,ClassNameTester2是从ClassNameTester1 派生其内脏的,但是不能代替与ClassNameTester1 有关的任何内容。但是,如果将它用作静态类,那应该不是问题。

关于C#以静态方法检索Classname,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6777845/

10-12 04:03