获取对象的实例名称,而不是C#4.0中的对象类型名称

时间:2012-04-18 08:12:21

标签: c# .net c#-4.0 reflection

假设此类型:

public class Car { } 

我创建了一个实例:

Car myCar = new Car();

Target target = new Target();
target.Model = myCar;

这是另一种类型:

public class Target {

   public object Model { get; set; }

   string GetName(){

     //Use Model and return myCar in this Example
   }

}

正如我在代码中所示,GetName方法必须使用对象类型(Model)并在此示例中返回myCar实例的名称?你有什么办法可以做到这一点?

更新 怎么样:

public class Car {

  public string Title { get; set; }

}

我转到目标:target.Model = Car.Title

GetName()方法返回Title

3 个答案:

答案 0 :(得分:4)

对象没有名称,除非他们明确地有办法存储他们的名字。 myCar是一个局部变量 - 对象本身(Car不知道您通过名称myCar引用它。举例说明:

Car myCar = new Car();
Car car2 = myCar;
Car car3 = myCar;

现在所有三个变量都引用相同的 Car

如果你想要汽车有名字,你可以做

public class Car 
{
    public string Name { get; set; }
} 

然后分配并阅读您希望它拥有的任何名称。

答案 1 :(得分:3)

不,这是不可能的。为什么?由于myCar只是<{1>}实例 内的名称,因此您为其设置了变量。保存到Car的内容是target.Model实例的引用。因此,在您的示例代码之后,CarmyCar引用target.Model的同一个实例,只是使用不同的名称。这些名称本身对于程序的执行并不重要,它只是我们用来简化实例讨论的一种技巧。

答案 2 :(得分:1)

没有“实例名称”这样的东西。你所说的是对象的具体引用的名称;可能有许多对同一对象的引用,都有不同的名称。此外,链接代码和数据(即依赖变量名称)是一种不好的做法。

如果您希望Car有一些名称,请将其命名为明确

public class Car {
    public string Name { get; set; }
} 

Car myCar = new Car { Name = "myCar" };