在C#4.0中获取对象的实例名称,而不是对象类型名称
假设这种类型:在C#4.0中获取对象的实例名称,而不是对象类型名称,c#,.net,c#-4.0,reflection,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 thi
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:target.Model=Car.Title
和
GetName()
方法返回的Title
?对象没有名称,除非它们明确有一种存储名称的方法myCar
是一个局部变量-对象本身(即Car
)不知道您用名称myCar
引用它。举例说明:
Car myCar = new Car();
Car car2 = myCar;
Car car3 = myCar;
现在,所有三个变量都指向相同的汽车
如果你想让汽车有名字,你可以这样做
public class Car
{
public string Name { get; set; }
}
然后分配并读取您想要的任何名称。没有“实例名称”这样的东西。您所说的是对象的特定引用的名称;同一个对象可能有许多引用,所有引用都具有不同的名称。此外,链接代码和数据(即依赖变量名)也是一种不好的做法
如果您希望Car
有一些名称,请明确地将其命名为:
public class Car {
public string Name { get; set; }
}
Car myCar = new Car { Name = "myCar" };
不,这是不可能的。为什么?因为myCar
只是设置变量的范围内的Car
实例的名称。保存到target.Model
的是对Car
实例的引用。因此,在示例代码之后,myCar
和target.Model
都引用了Car
的相同实例,只是名称不同。名称本身对程序的执行并不重要,这只是我们用来简化实例讨论的一个技巧。变量名称在业务逻辑中没有任何意义,也不应该有任何意义。因此,如果更改变量名称,事情就会破裂。为什么Model
只是一个对象,而不是Car
(或者它的一个子类)?不清楚Target
的意义是什么。但是您可能希望执行Target.Model=myCar
,然后可能稍后将其转换回Car
,并访问Title
属性。因此类似于Car-Car=Target.Model as Car;if(Car!=null){//对您的Car对象执行操作}
。好吧,你总是可以返回一个姓名列表…只是开玩笑;-)+1.我更新你现在的想法?我更新你现在的想法?