2015-01-31 79 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來更改專用字段的值......另外我懷疑它是您正在尋找的。

相關問題