Java与C#类名

时间:2015-06-05 12:05:41

标签: java c# class

Java 中,我可以简单地使用这样的类名:

public class MyClass
{
    public static String toString(Class<?> classType)
    {
        return classType.getName() ;
    }
}

package this.that;
public class OneClass
{
}

public static void main()
{
   System.out.println(MyClass.toString(OneClass));
}

给我完整的班级名称&#34; this.that.OneClass&#34;。

我在 C#中尝试了相同的操作,但是我在使用OneClass作为类型时遇到了错误。

public class MyClass
{
    public static String ToString(Type classType)
    {
        return classType.Name ;
    }
}

namespace this.that
{
    public class OneClass
    {
    }
}

static Main()
{
    Console.WriteLine(MyClass.ToString(OneClass));  // expecting "this.that.OneClass" result
}

请注意,我不想使用类实例

4 个答案:

答案 0 :(得分:10)

首先,让我们修复您的Java代码:此调用

System.out.println(MyClass.toString(OneClass));
除非您将.class添加到OneClass

,否则

无法编译

System.out.println(MyClass.toString(OneClass.class));

C#中.class语法的等效结构是typeof。它采用类型名称,并生成相应的System.Type对象:

Console.WriteLine(MyClass.ToString(typeof(OneClass)));

此外,C#不允许this作为标识符 * ,因此您应该重命名命名空间以排除关键字。最后,Name将打印该类的非限定名称。如果要查看名称空间的名称,请使用FullName属性:

public static String ToString(Type classType) {
    return classType.FullName;
}

Demo.

* 如果您使用this作为前缀,则该语言允许您使用@,但是应该尽一切努力避免使用此技巧。

答案 1 :(得分:0)

该行:

Console.WriteLine(MyClass.ToString(OneClass));

无效C#。你需要这样做:

Console.WriteLine(MyClass.ToString(typeof(OneClass)));

答案 2 :(得分:0)

您需要在c#

中使用命名空间而不是包
public class MyClass
{
    public static String toString(Type classType)
    {
        // returns the full name of the class including namespace
        return classType.FullName;
    }
}

您可以使用命名空间来打包类

namespace outerscope.innerscope
{
    public class OneClass
    {
    }
}

打印全名

Console.WriteLine(MyClass.toString(typeof(outerscope.innerscope.OneClass)));

答案 3 :(得分:0)

在C#中,你当然必须像其他人建议的那样使用typeof(OneClass)。

但是你的toString方法也是错误的,你必须使用Type.FullName来获取命名空间,而不仅仅是Type.Name