覆盖密封类toString

时间:2014-11-12 21:21:21

标签: c# listbox override tostring

我认为这是一个简单的问题,但找不到简单的答案。

我想覆盖toString()中的System.IO.FileInfo方法;但是,我通常的做法似乎不起作用。

我曾考虑创建一个继承自System.IO.FileInfo的新类,但我不能这样做,因为该方法被定义为已密封public sealed class FileInfo : FileSystemInfo

我尝试创建一个部分类;但是,由于System.IO处于不同的程序集中,我无法使其正常工作。

我甚至考虑过创建一个扩展方法,虽然这对于创建一个新方法起作用,但我无法简单地覆盖toString()


基本上,在当前的实现中,我有一个列表框,它的项目是FileInfo个项目的集合。目前toString()只打印名称,但我想要一个包含更多信息的条目。

我理解DataGridView会更合适,但我并不需要多列。我想我可以将ListBox的DisplayMember设置为我的扩展方法......但是,现在我意识到DisplayMember需要指向属性...而不是方法。

有人有任何建议吗?

谢谢

3 个答案:

答案 0 :(得分:1)

你无法覆盖它们。您可以编写自己的FileInfo - 类,并在此类中实现所有FileInfo方法。你可以编写自己的toString()方法。

这将是最简单的解决方案:

public class OwnFileInfo
{
    private FileInfo fileInfo;

    public OwnFileInfo(string fileName)
    {
        fileInfo = new FileInfo(fileName);
    }

    public FileStream Create()
    {
        return fileInfo.Create();
    }

    // ... more methods
}

答案 1 :(得分:0)

不可能覆盖密封类的成员。密封类的整个主动阻止任何人覆盖任何成员,允许该类型依赖于提供的确切实现。

在您的特定情况下,解决方案是不绑定FileInfo类型的对象。将对象集合转换为其他内容(这可以像调用Enumerable.Select一样简单。),并将 绑定到您的控件,而不是绑定FileInfo个对象直接

答案 2 :(得分:0)

考虑装饰FileInfo

public MyFileInfo 
{
   private FileInfo _fileInfo;

   public FileAttributes Attributes { get { return _fileInfo.Attributes; }  set { _fileInfo.Attributes = value; } }

   // other file info methods

   public override ToString()
   {
      // your code
   }
}