是否可以初始化一个自动返回自己类型的种子的对象
本文关键字:返回 自己 类型 种子 对象 一个 初始化 是否 | 更新日期: 2023-09-27 18:11:46
例如,我正在尝试初始化一个新的Person
var me = new Person();
但我只是想知道初始化是否有可能自动返回种子?
我正试图将它添加到构造函数中,但我不知道如何添加?
public class Person
{
public Person Person(){ return ...}
}
嗯,那真的不管用。有人能向我解释为什么它不起作用吗?是否有其他方法可以做到这一点?
我可以进行对象初始化,但我只是想知道这是否可能??
您可以创建一个静态方法(工厂(
var seededPerson = Person.CreateNew();
public class Person
{
private Person() {}
public static Person CreateNew()
{
return new Person() { Seed = 123; };
}
}
构造函数初始化当前(新分配的(实例;仅此而已。它不能返回任何内容。听起来你只是想要一种工厂方法:
public class Person
{
public static Person Create(){ return ...}
}
来自您的评论:
自动将值添加到变量(在本例中为"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");
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);
}
}
使用CCD_ 6使构造函数线程安全。