是否可以初始化一个自动返回自己类型的种子的对象

本文关键字:返回 自己 类型 种子 对象 一个 初始化 是否 | 更新日期: 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使构造函数线程安全。