У меня есть базовый класс, в котором есть метод для перемещения файлов в соответствующие папки.Есть много разных файлов с разными схемами именования.Перемещение и создание папки одинаковы для каждого файла, но определение даты отличается из-за разных имен файлов.Я пытаюсь сделать это:
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();
}
Проблема состоит в том, что этот код приводит к тому, что версия GetMonth базового класса вызывается внутри метода MoveFileToProcessedFolder.Я подумал, что с ключевым словом «new» это скрыло бы исходную реализацию и позволило бы взять на себя производную реализацию.Это не то, что происходит.Очевидно, я не понимаю цели нового в этом случае, может кто-нибудь помочь мне понять это?
Спасибо.