例如,我正在尝试初始化一个新人
var me = new Person();
但我只是想知道初始化是否可以自动返回种子?
我正在尝试将它添加到构造函数中,但我不知道如何?
public class Person
{
public Person Person(){ return ...}
}
好吧,那确实不行。任何人都可以向我解释为什么它不起作用,如果有另一种方法可以做到这一点?
我可以进行对象初始化,但我只是想知道这是否可能?
答案 0 :(得分:2)
你可以创建一个静态方法(工厂)
var seededPerson = Person.CreateNew();
public class Person
{
private Person() {}
public static Person CreateNew()
{
return new Person() { Seed = 123; };
}
}
答案 1 :(得分:2)
构造函数初始化当前(新分配的)实例;而已。它无法返回任何东西。听起来你只想要一个工厂方法:
public class Person
{
public static Person Create(){ return ...}
}
答案 2 :(得分:1)
public class Person
{
protected Person()
{
}
public static Person BuildPerson(out int seed)
{
var person = new Person();
seed = RuntimeHelpers.GetHashCode(person);
return person;
}
}
你是说这个意思吗?使用基于静态方法的“代理”构造函数?
或
public class Person
{
public Person(out int seed)
{
seed = RuntimeHelpers.GetHashCode(this);
}
}
带有out
参数的构造函数?
作为旁注,RuntimeHelpers.GetHashCode(object)
返回对象的伪唯一ID。伪唯一因为这些数字可以被.NET重用。总是给出独特ID的更好的“实现”将是:
public class Person
{
private static int seed;
public Person(out int seed)
{
seed = Interlocked.Increment(ref Person.seed);
}
}
使用Interlocked.Increment
使构造函数线程安全。
答案 3 :(得分:1)
来自你的评论:
自动为变量添加值(在本例中为“me”)并填充实例化对象..即:拥有Person.Name =“Joe”等...没有我手动进行对象初始化或什么不...基本上我希望模型/类在我实例化后立即创建自己的数据..
只需向无参数构造函数添加实现:
public class Person
{
public Person()
{
this.Name = "Joe";
}
public string Name { get; set; }
}
当您致电var me = new Person();
时,Name
已填充"Joe"
。
构造函数的更多用法
如果您希望能够更快地自定义名称,则可以向该构造函数添加参数,或添加带参数的其他构造函数:
public class Person
{
public Person()
: this("Joe") // Calls the other constructor that takes a name...
{
}
public Person(string name)
{
this.Name = name;
}
public string Name { get; set; }
}
var me = new Person(); // Joe
var you = new Person("You");
在最新的.Net中,您还可以使用这些参数的默认值来缩短代码:
public class Person
{
public Person(string name = "Joe") // Will be "Joe" unless you say otherwise
{
this.Name = name;
}
public string Name { get; set; }
}
var me = new Person(); // Joe
var you = new Person("You");