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

C# 无法继承密封类的最佳解决方案?,c#,inheritance,fileinfo,sealed,C#,Inheritance,Fileinfo,Sealed,我正在制作一个可以处理数千个文件的程序。对于每个文件,我都会创建一个FileInfo实例,但我缺少一些需要的方法和属性 我想通过从FileInfo导入来创建自己的自定义FileInfo类,但该类是密封的,所以我不能 我曾考虑过为FileInfo创建扩展方法,但这看起来很难看,需要我在处理时多次运行相同的代码。 因此,我提出了一个自定义类来“包装”FileInfo类 这是其中的一部分: class MyFileInfo { FileInfo _fileInfo; // wrapp

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

现在我的问题是:这是最好的方法吗?否则,如何解决无法继承密封类的问题呢?

如果您做得几乎正确,那么问题的解决方案就是使用

decorator模式是一种设计模式,允许对行为进行修改 静态或动态添加到单个对象, 不影响同一类中其他对象的行为

查看这些帖子了解更多详细信息:

1-


2-

您能解释一下扩展方法的问题吗?对于扩展方法,我会多次调用它们,从而多次运行相同的代码。然而,如果我有一个类,我可以做我需要做的所有事情,并且在构造函数中只设置一次自定义属性,这似乎更有效。如果它发生得足够多,并且有明显的开销,这是有意义的。顺便说一句,这里有一个,它将比你在那里得到的更安全,可能更快。回答我认为是你问题的核心:在我看来,你所做的是用内存换取周期的明智方式,但当你进行优化时,请概述所有内容,以确保你正在有效地解决真正的问题。谢谢你的帮助!我想我现在理解了装饰者的模式,但我还不确定为什么我应该在上面的解决方案中使用这个。使用decorator,我可以创建一个或多个具有我想要添加的功能的新类,然后在FileInfo的实例化中链接它们,对吗?例如:FileInfo FileInfo=newfileinfo.ExtensionClass