【问题标题】:Assign object value inside its own constructor在自己的构造函数中分配对象值
【发布时间】:2019-08-06 09:44:53
【问题描述】:

我正在尝试反序列化一个 Json 文件,但我想在我的类构造函数中进行。

正常使用的函数是

Model m = JsonConvert.DeserializeObject<Model>(File.ReadAllText(filename));

我希望我的班级有这样一个概念的构造函数:

Model(string filename) {
    this = JsonConvert.DeserializeObject<Model>(File.ReadAllText(filename));
}

我是编程新手,我也学过c++而不是c#。

此外,Model 包含字典等。

如果我忘记了问题中的某些内容,请告诉我。

【问题讨论】:

  • 不行。改用静态工厂方法 - Model.CreateFromFile(filename)
  • 您只能在结构中执行此操作,但即使这样也不是一个好主意。而是按照建议做,创建一个工厂方法。
  • 是的,我想我已经想到了“结构方法”。谢谢@LasseVågsætherKarlsen

标签: c# json constructor this


【解决方案1】:

你不能在构造函数中这样做。但是,您可以通过Model 类中的静态方法创建实例。

类似:

public static Model CreateFromFile(string filename)
{
    return JsonConvert.DeserializeObject<Model>(File.ReadAllText(filename));
}

然后,您可以在需要通过文件名创建实例的任何地方调用它: Model myModel = Model.CreateFromFile("myfile.json");

【讨论】:

  • 对了,为什么我需要关键字static?
  • static 关键字使方法成为静态的,它允许您使用该方法而无需先创建类的实例。如果它不是静态的,那么您需要先创建一个实例,然后从中调用方法(这将创建另一个实例)。
猜你喜欢
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多