【问题标题】:C# equivalent of class.forName() in Java [duplicate]C# 等效于 Java 中的 class.forName() [重复]
【发布时间】:2012-12-13 17:37:40
【问题描述】:

可能重复:
Get type name without full namespace in C#

有谁知道我们如何以简单的方式获取类的名称,就像 Java 可以通过 class.getName() 做的那样?

注意:是的,有一些混乱的解决方法,例如类类型的CreateInstance,然后获取对象的名称,但我想要一个简单的方法。

编辑 1:

实际上,我需要方法中的类名,比如 X。同时,我不想失去类型安全性,也不允许其他开发人员将字符串传递给该方法。像这样的:

void X( ??? class) // --> don't know how
{
     var className = get the name of class // --> which I don't know how
     Console.WriteLine(className);
}

X(tblEmployee); //--> usage of X, where tblEmployee is a POCO class

【问题讨论】:

    标签: c# class


    【解决方案1】:

    你是说,像这样?

    typeof(YourClass).Name
    

    澄清一下,在 .NET 框架中有一个名为 Type 的类。此类有一个名为 Name 的属性,用于检索类的名称。

    因此,要在编译时检索类的类型,您可以使用typeof

    var typeName = typeof(YourClass).Name
    

    如果您在运行时不知道类型,可以使用GetType() 方法检索它。这对所有 .NET 对象都很常见。

    Animal a = new Dog();
    var typeName = a.GetType().Name;
    

    编辑 1 的答案

    你需要传递一个Type参数

    void X(Type classType) 
    {
         var className = classType.Name;
         Console.WriteLine(className);
    }
    

    X 的调用应该是这样的

    X(typeof(YourClass));
    

    X(YourInstance.GetType());
    

    【讨论】:

      【解决方案2】:

      试试这个:

      typeof(YourClass).FullName;
      

      【讨论】:

        【解决方案3】:

        如果class

        • 某种类型的实例:

          class.GetType().Name;
          class.GetType().FullName; // with namespace
          
        • 输入自己:

          typeof(class).Name;
          typeof(class).Name; // with namespace
          

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-06
          • 2014-09-21
          • 2011-03-18
          • 2011-10-13
          • 1970-01-01
          • 1970-01-01
          • 2016-02-07
          • 2013-12-02
          相关资源
          最近更新 更多