2010-09-13 15 views
1

說我有如何將一個「路徑」傳遞給C#中的對象成員?

public class family 
{ 
    public person father; 
    public person mother; 
    public person[] child; 
} 

public class person 
{ 
    public string name; 
    public int age; 
} 

我想要做的就是添加一個功能到家庭,讓我指定我想保存到一個新的人的位置。

如果有C我會傳遞給人的指針,所以我可以指向一個新的人,但我對C#有點新,並且不知道該怎麼做。所以我希望它看起來像這樣:

public void SavePerson(int newAge, string newName, ??? location) 
{ 
    person addMe = new person(); 
    addMe.age = newAge; 
    addMe.name = newName; 
    location = addMe; 
} 

我不想更改以前的位置內容。如果它曾經指向弗蘭克,我想保持弗蘭克的方式,我只想讓它現在指向約翰(因爲其他東西可能仍然指向弗蘭克)

我需要這個的原因是因爲我有一個接口和類比這更復雜。但是有一個類需要創建和保存(它出現在一個大型的NHibernate創建的對象中),爲了簡單起見,我想將其轉換爲一個函數。

+0

使用ref關鍵字:http://msdn.microsoft.com/en-us/library/14akc2c7(VS.71).aspx – 2010-09-13 17:45:56

回答

4

做事的習慣C#的方式是簡單地返回新對象:

public Person CreatePerson(int age, string name) 
{ 
    Person person = new Person(); 
    person.Age = age; 
    person.Name = name; 
    return person; 
} 

用法:

family.Children[0] = CreatePerson(11, "Frank"); 
family.Children[1] = CreatePerson(15, "John"); 

或者,您可以通過Person[]和索引方法:

public void SavePerson(int age, string name, Person[] persons, int index) 
{ 
    persons[index] = new Person(); 
    persons[index].Age = age; 
    persons[index].Name = name; 
} 

用法:

SavePerson(11, "Frank", family.Children, 0); 
SavePerson(15, "John", family.Children, 1); 

但我不知道爲什麼你要委派這個責任,你的工廠方法。


如果你真的想通過參考操縱變量的內容,你可以做到這一點使用refout關鍵字:

public void SavePerson(int age, string name, out Person person) 
{ 
    person = new Person(); 
    person.Age = age; 
    person.Name = name; 
} 

用法:

SavePerson(11, "Frank", out family.Children[0]); 
SavePerson(15, "John", out family.Children[1]); 

參見:Parameter passing in C#

參見:When is using the C# ref keyword ever a good idea?


但是,爲什麼不簡單地使用對象和集合初始值設定項?

Person mom = new Person { Age = 41, Name = "Martha" }; 
Person dad = new Person { Age = 43, Name = "Dan" }; 

Family family = new Family(mom, dad) 
{ 
    new Person { Age = 11, Name = "Frank" }, 
    new Person { Age = 15, Name = "John" }, 
}; 

參見:Object and Collection Initializers

+0

的ref和out關鍵字是什麼我正在尋找,但對象初始值設定項可能是我在這裏的目標。謝謝! – Justin 2010-09-13 18:29:41

相關問題