我认为这是一个简单的问题,但找不到简单的答案。
我想覆盖toString()
中的System.IO.FileInfo
方法;但是,我通常的做法似乎不起作用。
我曾考虑创建一个继承自System.IO.FileInfo
的新类,但我不能这样做,因为该方法被定义为已密封public sealed class FileInfo : FileSystemInfo
。
我尝试创建一个部分类;但是,由于System.IO
处于不同的程序集中,我无法使其正常工作。
我甚至考虑过创建一个扩展方法,虽然这对于创建一个新方法起作用,但我无法简单地覆盖toString()
。
基本上,在当前的实现中,我有一个列表框,它的项目是FileInfo
个项目的集合。目前toString()
只打印名称,但我想要一个包含更多信息的条目。
我理解DataGridView
会更合适,但我并不需要多列。我想我可以将ListBox的DisplayMember
设置为我的扩展方法......但是,现在我意识到DisplayMember
需要指向属性...而不是方法。
有人有任何建议吗?
谢谢
答案 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
}
}