2015-01-31 92 views
0

我想在c#中创建一个类,该类包含内部字符串中的实例名称。 例如,类 '人':c#中的类 - 创建一个包含类的实例名称的字符串

Person steve = new Person(); 

和班会看起来像:

class Person 
{ 
    private string Name; 
} 

所以字符串 '名称' 将包含: “史蒂夫”。

我该怎么做?那可能吗?

+1

实例通常没有名称。你想达到什么目的? – 2015-01-31 19:51:32

+2

你为什么想这样做?这似乎是一个可怕的想法。 – 2015-01-31 19:51:39

+0

如果你有'Person steve = new Person();人乔=史蒂夫;'? – 2015-01-31 19:52:22

回答

3

不,这是不可能的。

考虑一下:

Person steve = new Person(); 
Person john = steve; 

现在所说Name是什么?

A 变量名称不是实例名称。实例没有名称,但是内存中的位置以及多个变量名称可能指向同一个实例。

+0

It * is * possible,see:http://stackoverflow.com/questions/2566101/how-to-get-variable-名称使用反射。这并不意味着在这种情况下(或者,真的......)当然是一个好主意。 – 2015-01-31 23:02:57

+0

@EdS。您可以获取已知变量的变量名称,但类实例本身无法获取它自己分配的变量的名称。 – Cyral 2015-02-01 01:16:03

+0

@EdS这是一个非常不同的事情 – Jcl 2015-02-01 08:29:35

3

如果将实例创建为参数会发生什么?或者如果它在数组中使用?或者如果它被重新分配给另一个变量? 这不是一个好主意(也不可能你想要的方式)

使用string参数的构造函数,赋值的名称:

class Person 
{ 
    private string Name { get; set; } 

    public Person(string name) 
    { 
     Name = name; 
    } 
} 

并创建实例作为:

Person steve = new Person("Steve"); 

字符串“Steve”现在在创建时传递给类的构造函数。见Constructors (C# Programming Guide)

0

这是很可能你正在寻找Dictionary<string, Person>到的人名映射到一个人的实例:

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

var people = new Dictionary<string, Person>(); 

people.Add("Steve", new Person { Name = "Steve"}); 

var theSteve = people["Steve"]; 

  • 作为变量的所有其他的答案提到名字/ field与实例的值/属性没有直接关系。
  • 制作“姓名”private看起来有点奇怪 - 如果您想查看该人的姓名是什么,您应该将其公开(或更好地使其属性如示例中所示)。如果你不想让其他代码访问“名称” - 你需要在构造函数中设置它。

也可以做你问到底是什么 - “创建方法,其中有一个与持有的实例,对象和对象的私有字段的一个有名字等于变量名指定名称变量”。你会使用Reflection.Emit在运行时构造这样的方法,并且可能需要使用Reflection命名空间中的其他API来更改专用字段的值......另外我怀疑它是您正在寻找的。

相关问题