9

假设我有以下课程..

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# 中的对象是否有名称?

4

3 回答 3

16
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"
    }
}
于 2012-09-03T04:30:15.953 回答
15

我猜您指的是变量的名称“a”。好吧,问题是:这不是对象的名称——对象没有名称。此外,一个对象可以有零个或多个对它的引用,例如:

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

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

new SomeType();

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

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

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

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

于 2012-09-03T02:21:14.743 回答
2

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

Class Boy
{   
    int age;
    public void setAge(int age)
    {
        this.age = age; 
    }
}
于 2012-09-03T01:54:23.567 回答