【发布时间】:2010-08-18 22:52:52
【问题描述】:
我有一个抽象的目录类,如下所示。它有一个静态方法 OpenCatalog(),用于根据提供的位置类型返回特定的具体目录。一旦它确定了目录的类型,它就会调用正确的具体目录类型的特定 OpenCatalog() 方法。例如,我可能有一个存储在 SQL 数据库中的 Catalog 实现,或者另一个存储在文件系统中的实现。请参阅下面的代码。
public abstract class Catalog
{
public static ICatalog OpenCatalog(string location, bool openReadOnly)
{
if(location is filePath)
{
return FileSystemCatalog.OpenCatalog(string location, bool openReadOnly);
}
else if(location is SQL server)
{
return SqlCatalog.OpenCatalog(string location, bool openReadOnly);
}
else
{
throw new ArgumentException("Unknown catalog type","location");
}
}
...
}
public abstract class FileSystemCatalog:Catalog
{
public static new ICatalog OpenCatalog(string location, bool openReadOnly)
{
//Deserializes and returns a catalog from the file system at the specified location
}
...
}
public abstract class SqlCatalog:Catalog
{
public static new ICatalog OpenCatalog(string location, bool openReadOnly)
{
//creates an returns an instances of a SqlCatalog linked to a database
//at the provided location
}
...
}
首先一般可以隐藏静态方法吗?我知道这是可能的,但它似乎也是不应该经常做的事情。这也是一个可以隐藏静态方法的有效示例,还是有更好的方法来做我想做的事情?
【问题讨论】:
标签: c# .net class-design static-methods