我有一个基类,它具有将文件移动到适当文件夹的方法。有许多不同的文件具有许多不同的命名方案。每个文件的移动和文件夹创建都是相同的,但是由于文件名不同,确定日期是不同的。我正在尝试这样做:
public class FileBase
{
protected FileInfo _source;
protected string GetMonth()
{
// 2/3 Files have the Month in this location
// So I want this to be used unless a derived class
// redefines this method.
return _source.Name.Substring(Source.Name.Length - 15, 2);
}
public void MoveFileToProcessedFolder()
{
MoveFileToFolder(Properties.Settings.Default.processedFolder + GetMonth);
}
private void MoveFileToFolder(string destination)
{
....
}
}
public class FooFile : FileBase
{
protected new string GetMonth()
{
return _source.Name.Substring(Source.Name.Length - 9, 2);
}
}
public class Program
{
FooFile x = new FooFile("c:\Some\File\Location_20110308.txt");
x.MoveFileToProcessedFolder();
}
问题是此代码导致在“MoveFileToProcessedFolder”方法中调用“GetMonth”的基类版本。我认为使用“new”关键字,这将隐藏原始实现并允许派生实现接管。这不是正在发生的事情。显然我不理解 new 在这种情况下的目的,那里的任何人都可以帮助我理解这一点吗?
谢谢。