我可以在C#中获取对象的名称吗?

时间:2012-09-03 01:47:21

标签: c#

我们说我有以下课程。

Class Boy
{
    public void hello()
    {
        Console.WriteLine("Hello!");
    }
    static void Main(String[] args)
    {
            Boy a = new Boy();
            a.hello();
    }
}

我知道变量'a''Boy'类型的参考变量。关键字'new'创建了'Boy'的对象,将其地址分配给变量'a'

现在,我有可能得到我的对象的名字。 C#中的对象是否有名称?

3 个答案:

答案 0 :(得分:12)

我猜你是指变量的名称,“a”。嗯,问题是:不是对象的名称 - 对象没有名称。此外,对象可以对其进行零个或多个引用,例如:

var x = new SomeType(); // a class
var y = x;

这里x和y都指向同一个对象。同样:

new SomeType();

没有任何引用,但仍然是一个对象。此外,方法变量(本地)实际上在IL中没有名称 - 仅在c#中(对比,字段确实有名称)。所以new SomeType().WriteName();毫无意义。

所以没有:从对象引用中获取变量名称没有明智的方法。

如果您希望对象具有名称,请添加Name属性。

有一些有趣的方法可以使用表达式树来获取字段变量的名称,但我不认为这对您尝试的操作有用。

答案 1 :(得分:10)

class Boy
{
    public void hello()
    {
        Console.WriteLine("Hello!");
    }
    static void Main(String[] args)
    {
        Boy a = new Boy();
        a.hello();
        Type objtype = a.GetType();
        Console.WriteLine(objtype.Name); // this will display "Boy"
    }
}

答案 2 :(得分:2)

我们没有对象的名称。实际上,对象的引用被分配给引用变量,以便通过公共方法/属性访问 data 。如果您希望在该特定类的instance方法中引用对象,则使用this变量。

Class Boy
{   
    int age;
    public void setAge(int age)
    {
        this.age=age; 
    }
}