无法继承密封类的最佳解决方法?

时间:2019-10-02 17:04:04

标签: c# inheritance fileinfo sealed

我正在制作一个处理数千个文件的程序。对于每个文件,我都会创建一个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;
    }
}

现在我的问题是:这是最好的方法吗?还有什么办法可以解决无法继承密封类的问题?

1 个答案:

答案 0 :(得分:2)

您做得差不多,解决问题的方法就是使用decorator pattern

  

装饰器模式是一种设计模式,可以使行为成为   静态或动态地添加到单个对象中,   而不会影响同一类中其他对象的行为。

查看这些帖子以获取更多详细信息:

1- UnderstandingplusandplusImplementingplusDecoratorp

2- benefiting-with-the-decorator-pattern