gpt4 book ai didi

c# - 我可以在构造函数运行之前使用对象初始化语法为属性赋值吗?

转载 作者:行者123 更新时间:2023-11-30 13:20:06 25 4
gpt4 key购买 nike

我正在使用 System.Xml.Serialization 将对象序列化为 XML,这需要我有无参数的构造函数。

因此,我尝试使用对象初始化语法为某些属性赋值,然后在将对象序列化为 XML 之前使用构造函数逻辑根据需要格式化这些值。

我的问题是构造函数在属性赋值之前运行。一个简化的例子如下:

class Program
{
static void Main(string[] args)
{
Foo myFoo = new Foo() { HelloWorld = "Beer", HelloWorldAgain = "More beer" };

Console.WriteLine(myFoo.HelloWorld);
Console.WriteLine(myFoo.HelloWorldAgain);

Console.ReadLine();
}
}

public class Foo : Bar
{
public string HelloWorld { get; set; }

public Foo()
{
Console.WriteLine("Foo Was Initialized");
Console.WriteLine(HelloWorld);
}
}

public abstract class Bar
{
public string HelloWorldAgain { get; set; }

public Bar()
{
Console.WriteLine("Bar was initialized");
Console.WriteLine(HelloWorldAgain);
}
}

这会产生以下输出:

Output

如您所见,构造函数逻辑运行,然后为属性赋值。我需要它以相反的方式工作。

这可能吗?

最佳答案

序列化要求您有一个无参数的构造函数,但并不限制您只能使用一个构造函数。

保留用于反序列化的无参数构造函数,但添加另一个构造函数,它接受您的值并在您需要在代码中实例化类时执行所需的初始化。

对象初始化语法只是构造后设置属性的简写。

关于c# - 我可以在构造函数运行之前使用对象初始化语法为属性赋值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com