首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖密封类toString

覆盖密封类toString
EN

Stack Overflow用户
提问于 2014-11-12 21:21:20
回答 3查看 1.6K关注 0票数 0

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

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

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

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

我甚至考虑过创建一个扩展方法,虽然这有助于创建一个新方法,但我不能简单地覆盖toString()

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

我知道DataGridView会更合适,但我并不真正需要多列。我想我可以将ListBox的DisplayMember设置为我的扩展方法.但是,现在我意识到DisplayMember需要指向一个属性.不是什么方法。

有人有什么建议吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-12 21:24:19

你不能推翻他们。您可以编写自己的FileInfo-Class,并在该类中实现所有FileInfo方法。而不是您可以编写自己的toString()方法。

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

代码语言:javascript
复制
public class OwnFileInfo
{
    private FileInfo fileInfo;

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

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

    // ... more methods
}
票数 1
EN

Stack Overflow用户

发布于 2014-11-12 21:24:26

不可能覆盖密封类的成员。密封类的全部目的是积极防止任何人覆盖任何成员,允许类型依赖于所提供的确切实现。

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

票数 0
EN

Stack Overflow用户

发布于 2014-11-12 21:26:58

考虑装饰FileInfo

代码语言:javascript
复制
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
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26896807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档