有没有一种 DRYer 方法可以在 C# 中初始化 class 值?
Is there a DRYer way to initialise class values in C#?
假设我有一个 class:
class Foo
{
private int blah;
private char bleh;
private string bluh;
//...
public Foo()
{
}
}
现在通常,我必须像这样初始化它:
public Foo(int blah, char bleh, string bluh,...)
{
this.blah=blah;
this.bleh=bleh;
this.bluh=bluh;
//...
}
这很无聊,而且似乎没有遵循“不要重复自己”的原则,所以我正在寻找更好的解决方案。这个可以做DRYer吗?
编辑:将变量更改为私有以反映更常见的用例。
class Foo
{
public readonly int blah;
public readonly char bleh;
public readonly string bluh;
//...
public Foo(int blah, char bleh, string bluh)
{
this.blah=blah;
this.bleh=bleh;
this.bluh=bluh;
//...
}
}
可以写成记录类型,并且是一个很好的候选者,因为它是不可变的。要将以上内容重写为记录,只需使用
public record Foo(int blah, char bleh, string bluh);
我认为更干净,似乎就是您所追求的。
如果您真的不想重复自己
,请在初始化 variables/properties 时使用对象初始化
像这样
Foo f = new foo{
blah = 1;
bleh = 'A';
bluh = "something";
};
另外,不要在您的字段上使用 public 访问器,那样不好。
假设我有一个 class:
class Foo
{
private int blah;
private char bleh;
private string bluh;
//...
public Foo()
{
}
}
现在通常,我必须像这样初始化它:
public Foo(int blah, char bleh, string bluh,...)
{
this.blah=blah;
this.bleh=bleh;
this.bluh=bluh;
//...
}
这很无聊,而且似乎没有遵循“不要重复自己”的原则,所以我正在寻找更好的解决方案。这个可以做DRYer吗?
编辑:将变量更改为私有以反映更常见的用例。
class Foo
{
public readonly int blah;
public readonly char bleh;
public readonly string bluh;
//...
public Foo(int blah, char bleh, string bluh)
{
this.blah=blah;
this.bleh=bleh;
this.bluh=bluh;
//...
}
}
可以写成记录类型,并且是一个很好的候选者,因为它是不可变的。要将以上内容重写为记录,只需使用
public record Foo(int blah, char bleh, string bluh);
我认为更干净,似乎就是您所追求的。
如果您真的不想重复自己
,请在初始化 variables/properties 时使用对象初始化像这样
Foo f = new foo{
blah = 1;
bleh = 'A';
bluh = "something";
};
另外,不要在您的字段上使用 public 访问器,那样不好。