【发布时间】:2010-06-09 00:08:50
【问题描述】:
我正在开发一个类来比较两个目录并在源目录中的目录/文件在目标目录中不存在时运行一个操作。
这是该类的原型:
public abstract class IdenticalDirectories
{
private DirectoryInfo _sourceDirectory;
private DirectoryInfo _destinationDirectory;
protected abstract void DirectoryExists(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory);
protected abstract void DirectoryDoesNotExist(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory);
protected abstract void FileExists(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory);
protected abstract void FileDoesNotExist(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory);
public IdenticalDirectories(DirectoryInfo sourceDirectory, DirectoryInfo destinationDirectory)
{
...
}
public void Run()
{
foreach (DirectoryInfo sourceSubDirectory in _sourceDirectory.GetDirectories())
{
DirectoryInfo destinationSubDirectory = this.GetDestinationDirectoryInfo(subDirectory);
if (destinationSubDirectory.Exists()) {
this.DirectoryExists(sourceSubDirectory, destinationSubDirectory);
} else {
this.DirectoryDoesNotExist(sourceSubDirectory, destinationSubDirectory);
}
foreach (FileInfo sourceFile in sourceSubDirectory.GetFiles()) {
FileInfo destinationFile = this.GetDestinationFileInfo(sourceFile);
if (destinationFile.Exists()) {
this.FileExists(sourceFile, destinationFile);
} else {
this.FileDoesNotExist(sourceFile, destinationFile);
}
}
}
}
}
上面的原型是一个抽象类。我想知道使类非抽象并将 Run 方法接收器作为处理器是否会更好?例如。
public void Run(IIdenticalDirectoriesProcessor processor)
{
foreach (DirectoryInfo sourceSubDirectory in _sourceDirectory.GetDirectories()) {
DirectoryInfo destinationSubDirectory = this.GetDestinationDirectoryInfo(subDirectory);
if (destinationSubDirectory.Exists()) {
processor.DirectoryExists(sourceSubDirectory, destinationSubDirectory);
} else {
processor.DirectoryDoesNotExist(sourceSubDirectory, destinationSubDirectory);
}
foreach (FileInfo sourceFile in sourceSubDirectory.GetFiles()) {
FileInfo destinationFile = this.GetDestinationFileInfo(sourceFile);
if (destinationFile.Exists()) {
processor.FileExists(sourceFile, destinationFile);
} else {
processor.FileDoesNotExist(sourceFile, destinationFile);
}
}
}
}
您认为每种实施方式的优缺点是什么?
【问题讨论】:
标签: c# interface abstract-class