我想在c#中創建一個類,該類包含內部字符串中的實例名稱。 例如,類 '人':c#中的類 - 創建一個包含類的實例名稱的字符串
Person steve = new Person();
和班會看起來像:
class Person
{
private string Name;
}
所以字符串 '名稱' 將包含: 「史蒂夫」。
我該怎麼做?那可能嗎?
我想在c#中創建一個類,該類包含內部字符串中的實例名稱。 例如,類 '人':c#中的類 - 創建一個包含類的實例名稱的字符串
Person steve = new Person();
和班會看起來像:
class Person
{
private string Name;
}
所以字符串 '名稱' 將包含: 「史蒂夫」。
我該怎麼做?那可能嗎?
不,這是不可能的。
考慮一下:
Person steve = new Person();
Person john = steve;
現在所說Name
是什麼?
A 變量名稱不是實例名稱。實例沒有名稱,但是內存中的位置以及多個變量名稱可能指向同一個實例。
如果將實例創建爲參數會發生什麼?或者如果它在數組中使用?或者如果它被重新分配給另一個變量? 這不是一個好主意(也不可能你想要的方式)
使用string
參數的構造函數,賦值的名稱:
class Person
{
private string Name { get; set; }
public Person(string name)
{
Name = name;
}
}
並創建實例作爲:
Person steve = new Person("Steve");
字符串「Steve」現在在創建時傳遞給類的構造函數。見Constructors (C# Programming Guide)
這是很可能你正在尋找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
看起來有點奇怪 - 如果您想查看該人的姓名是什麼,您應該將其公開(或更好地使其屬性如示例中所示)。如果你不想讓其他代碼訪問「名稱」 - 你需要在構造函數中設置它。也可以做你問到底是什麼 - 「創建方法,其中有一個與持有的實例,對象和對象的私有字段的一個有名字等於變量名指定名稱變量」。你會使用Reflection.Emit
在運行時構造這樣的方法,並且可能需要使用Reflection
命名空間中的其他API來更改專用字段的值......另外我懷疑它是您正在尋找的。
實例通常沒有名稱。你想達到什麼目的? – 2015-01-31 19:51:32
你爲什麼想這樣做?這似乎是一個可怕的想法。 – 2015-01-31 19:51:39
如果你有'Person steve = new Person();人喬=史蒂夫;'? – 2015-01-31 19:52:22