我想在c#中创建一个包含内部字符串中实例名称的类。 例如,班级':':
Person steve = new Person();
并且该类看起来像这样:
class Person
{
private string Name;
}
所以字符串'姓名'将包含:" steve"。
我该怎么做?这可能吗?
答案 0 :(得分:3)
不,这是不可能的。
考虑一下:
Person steve = new Person();
Person john = steve;
现在Name
会是什么?
变量名称不是实例名称。实例没有名称,但内存中的位置,以及多个变量名可能指向同一个实例。
答案 1 :(得分: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)
答案 2 :(得分: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"];
注释
private
看起来有点奇怪 - 如果你想查看这个人的名字,你应该公开(或者更好地使其属性如我的样本所示)。如果您不希望其他代码访问&#34;名称&#34; - 您需要在构造函数中设置它。也可以完全按照您的要求进行操作 - &#34;创建方法,其中存在具有给定名称的变量,其中包含对象的私有字段,而对象的私有字段之一的名称等于变量名称&#34 ;。您在运行时使用Reflection.Emit
构造此类方法,并且可能需要在Reflection
命名空间中使用其他API来更改私有字段的值...我也怀疑它是什么寻找。