C#等价于Java中的类.forName()

本文关键字:forName 等价于 Java | 更新日期: 2023-09-27 17:50:06

可能重复:
在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#等价于Java中的类.forName()

你是说,像这样?

typeof(YourClass).Name

需要说明的是,在.NET框架中有一个名为Type的类。这个类有一个名为Name的属性,用于检索类的名称。

因此,要在编译时检索类的Type,可以使用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());

如果class

  • 某种类型的实例:

    class.GetType().Name;
    class.GetType().FullName; // with namespace
    
  • 类型本身:

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

试试这个:

typeof(YourClass).FullName;