我正在制作一个处理数千个文件的程序。对于每个文件,我都会创建一个FileInfo实例,但是我缺少一些所需的方法和属性。
我想通过继承FileInfo来创建自己的自定义FileInfo类,但是该类是密封的,所以我不能。
我考虑过为FileInfo创建扩展方法,但这看起来很丑,并且需要我在处理过程中多次运行相同的代码。 因此,相反,我想出了一个“包装” FileInfo类的自定义类。
这是其中的一部分:
class MyFileInfo
{
FileInfo _fileInfo;
// wrapper of existing property
public string Name { get { return _fileInfo.Name; } }
// custom property
public string NameWithoutExtension { get; private set; }
// custom property
public string Increment { get; private set; }
public MyFileInfo(string filePath)
{
_fileInfo = new FileInfo(filePath);
NameWithoutExtension = GetNameWithoutExtension();
Increment = GetIncrement();
}
private string GetNameWithoutExtension()
{
return _fileInfo.Name.Replace(_fileInfo.Extension, string.Empty);
}
private string GetIncrement()
{
return Regex.Match(NameWithoutExtension, @" #?\d{1,4}$").Value;
}
}
现在我的问题是:这是最好的方法吗?还有什么办法可以解决无法继承密封类的问题?
答案 0 :(得分:2)
您做得差不多,解决问题的方法就是使用decorator pattern
。
装饰器模式是一种设计模式,可以使行为成为 静态或动态地添加到单个对象中, 而不会影响同一类中其他对象的行为。
查看这些帖子以获取更多详细信息: