我有以下情况:我想通过结构来识别CSV文件。结构可以简单地指“列名”,但人们可以想象更复杂的结构定义,其中包括CSV文件的更多属性。例如,“列名和分隔符”或“文件名符合某种模式”等。
这就是为什么我想创建一个接口,所有表示这种结构定义的类都需要实现该接口。最简单的定义将是:
在此示例中,
但是,在C#中,您无法声明接口中的静态方法。您也无法将其声明为接口中的实例方法并将其实现为静态方法。
我的问题现在是:
这就是为什么我想创建一个接口,所有表示这种结构定义的类都需要实现该接口。最简单的定义将是:
interface ICSVFormatDefinition {
bool isFileInThisFormat(string filename);
}
然而,现在我想要一个静态方法来分析文件中需要定义结构的元素,并返回相应的结构类。代码如下:
interface ICSVFormatDefinition {
bool isFileInThisFormat(string filename);
static ICSVFormatDefinition createFormatFromFile(string filename);
}
在此示例中,
createFormatFromFile
的方法在每个接口实现中肯定都不相同,因为有些接口只查看文件名,而另一些可能查看列名等其他信息。但是,在C#中,您无法声明接口中的静态方法。您也无法将其声明为接口中的实例方法并将其实现为静态方法。
我的问题现在是:
- 我猜这是不好的设计,因为C#不允许我执行它。 但为什么是不好的?
- 强制所有结构定义类(实现ICSVFormatDefinition)具有创建自身新实例的方法的适当方式是什么?