У меня есть абстрактный класс каталога следующим образом.Он имеет статический метод OpenCatalog (), который используется для возврата конкретного конкретного каталога в зависимости от типа предоставленного местоположения.Как только он определил тип каталога, он вызывает определенный метод OpenCatalog () правильного конкретного типа каталога.Например, у меня может быть реализация Catalog, которая хранится в базе данных SQL, или другая, которая хранится в файловой системе.См. Код ниже.
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
}
...
}
Во-первых, нормально ли скрывать статический метод?Я знаю, что это возможно, но это также кажется чем-то, что не следует делать очень часто.Также это правильный пример, где можно скрыть статический метод, или есть лучший способ сделать то, что я пытаюсь сделать?