c# - 我应该使用多个构造函数还是一个接口(interface)?

标签 c# constructor interface

我有一个名为 Package 的类,在这个类中我有大约 10 个属性,我们称它们为 1,2,3,4.. 等到 10。这些属性的类型是 stringsints 和一些 DateTimes。在创建 Package 的新对象时,有时我只需要属性 1,有时我需要 5、6 和 9,有时我需要 3 和 10 等等。

所以只有两个例子:new Package("bla", "bla bla",100)new Package(2983)

我已经 read :

An interface looks like a class, but has no implementation. The only thing it contains are declarations of events, indexers, methods and/or properties. The reason interfaces only provide declarations is because they are inherited by classes and structs, which must provide an implementation for each interface member declared.

由于类中没有其他方法,只有一个构造函数和属性,是使用 20 个构造函数更好还是应该为这种情况创建一个接口(interface)?

编辑: 我可能应该提到我还有一些 enums 来“某种程度上”确定它是哪种 Package

最佳答案

界面在这里对您没有任何帮助。

如果你想强制将特定变量填充在一起,比如 1、2 和 3 应该始终填充在一起,但在另一种情况下,只需要 4 个就足够了,你可以使用单独的构造函数,或者具有创建有用名称的静态方法对象(如 CreateFromIdCreateFromNameAndAge)。

如果你根本不在乎,你可以简单地创建一个无参数的构造函数(或一个带有可选字段的构造函数)并使用对象初始化器设置所需的字段:

var x = new Class() { Field1 = 1, Field2 = "2" };

也许这是您在单个对象中做的太多的迹象,但如果没有关于您的类设计的实际信息,我们无法说出那么多。

如果包有不同的用途(如 ProductPackagePersonPackage 等),继承在这里似乎也是一个不错的解决方案。共享属性驻留在基类中,所有特定属性都可以驻留在派生类中。

关于c# - 我应该使用多个构造函数还是一个接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32818969/

相关文章:

c# - 应禁用单个页面的表单例份验证

c# - 保留延期执行范围之外的堆栈变量

java - 类的 "direct superinterface"是什么意思?

Typescript 接口(interface)通用属性名称

mysql - 指向 MySQL 查询抽象接口(interface)的指针片段

c# - 事件和委托(delegate),如何将其编码为2级深度?

c# - 使用 Xamarin.Android 为 Parse.com 服务器制作更漂亮的 Facebook 登录屏幕

c++ - C++ 构造函数\析构函数中的奇怪行为

Java URL 构造函数错误

c++ - const_cast 类构造函数中的 const 成员