我有一个我认为是简单的问题,但找不到一个简单的答案。
我想在toString()中重写System.IO.FileInfo方法;但是,我通常的方法似乎不起作用。
我曾经想过创建一个继承自System.IO.FileInfo的新类,但是我不能这样做,因为该方法被定义为密封public sealed class FileInfo : FileSystemInfo。
我尝试创建一个分部类;但是,由于System.IO位于不同的程序集中,所以无法使它正常工作。
我甚至考虑过创建一个扩展方法,虽然这有助于创建一个新方法,但我不能简单地覆盖toString()。
本质上,在当前的实现中,我有一个列表框,它的项是FileInfo项的集合。目前,toString()只打印名称,但是我希望有一个条目,其中包含一些更多的信息。
我知道DataGridView会更合适,但我并不真正需要多列。我想我可以将ListBox的DisplayMember设置为我的扩展方法.但是,现在我意识到DisplayMember需要指向一个属性.不是什么方法。
有人有什么建议吗?
谢谢
发布于 2014-11-12 21:24:19
你不能推翻他们。您可以编写自己的FileInfo-Class,并在该类中实现所有FileInfo方法。而不是您可以编写自己的toString()方法。
这将是最简单的解决方案:
public class OwnFileInfo
{
private FileInfo fileInfo;
public OwnFileInfo(string fileName)
{
fileInfo = new FileInfo(fileName);
}
public FileStream Create()
{
return fileInfo.Create();
}
// ... more methods
}发布于 2014-11-12 21:24:26
不可能覆盖密封类的成员。密封类的全部目的是积极防止任何人覆盖任何成员,允许类型依赖于所提供的确切实现。
在您的特定情况下,解决方案只是简单地不绑定类型为FileInfo的对象。将对象集合转换为其他东西(这可以像调用Enumerable.Select一样简单),并将其绑定到您的控件,而不是直接绑定FileInfo对象。
发布于 2014-11-12 21:26:58
考虑装饰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
}
}https://stackoverflow.com/questions/26896807
复制相似问题