2010-09-13 18 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

相关问题