如何在C#中创建一个继承另一个记录的属性而无需显式重写它们的记录?

3

你能否对记录参数进行因式分解,以使代码更易于修改?

例如,如果我有:

public record A(int Param1, int Param2, int Param3, int Something);
public record B(int Param1, int Param2, int Param3, string OtherThing);
public record C(int Param1, int Param2, int Param3);

我希望得到类似以下的东西:

我想要的是:

public record Base(int Param1, int Param2, int Param3);
public record A(int Something) : Base;
public record B(string OtherThing) : Base;
public record C() : Base;

所以如果有一天我想修改Param1,我只需要修改一次而不是三条记录都修改。


1
你需要更详细地解释你想要实现什么。可能涉及到继承、构造函数、单例模式等不同的东西,它们或多或少地有所帮助。 - BurnsBA
@BurnsBA 我想要继承的相同行为,但不需要显式地编写所有属性。我的想法是我有多个记录具有相同的属性,因此我想创建一个通用记录来存储这些通用属性,我的特定记录可以拥有它们(就像继承一样)。 - AoooR
1个回答

2
记录的类型签名是类型的构造函数定义。只要您希望构造函数具有所有“属性”(如您所称),就需要将它们全部键入。
这意味着:
public record Specific1(int Attr3) : Global;

这段代码无法编译,因为Global中没有不带参数的构造函数。相反,请看以下示例:

public record Specific1(int Attr3) : Global(0, 0);

尽管可能不会达到您的预期,但这段代码是可以编译的。再次提醒,您在记录声明中编写的参数是构造函数中存在的参数。


你好,感谢你的回答,但实际上这不是我要找的。我刚刚编辑了我的问题,也许更清晰易懂了? - AoooR
1
我明白你想要什么,我只是试图向你解释为什么这是不可能的:“记录的类型签名是类型的构造函数定义”。 - Blindy
一些替代方案包括没有构造函数和“required”属性的类(C# 11),或者使用源代码生成器根据提供的字段为您编写构造函数。 - Blindy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接