我有一个基本的c#app来处理一些sql文件。我为每种类型的对象都有一个类,如proc,function,view等。
我想要做的主要是确定我处理什么样的脚本文件,然后创建该类的实例。
然后使用该对象,将其命名为objSqlType,我想在底层类中调用一个方法。每个类都将实现相同的方法名称,如getHeader(),getPermissions()等
这可能吗?我查看了界面,它迫使我创建方法,但似乎不能使用单个对象,
例如:
object objSqlType;
switch (type)
{
case ObjectType.PROC:
objSqlType = new SqlProc();
break;
case ObjectType.FUNCTION:
objSqlType = new SqlFunction();
break;
case ObjectType.VIEW:
objSqlType = new SqlView();
break;
default:
break;
}
string header = objSqlType.getHeader(); // call getHeader for whichever object I created
答案 0 :(得分:4)
像这样:
git svn clone --stdlayout full/svn/repo/url/projectA
git svn clone --stdlayout full/svn/repo/url/projectB
答案 1 :(得分:0)
使用dynamic
dynamic objSqlType;
// rest of code
string header = objSqlType.getHeader();
此外,您似乎在这里使用了未初始化的变量,因为如果您处于default
情况,那么objSqlType
未初始化且您无法使用未初始化的本地变量。
答案 2 :(得分:0)
创建一个接口并使每个对象都实现它。或者,创建一个抽象类,并使每个对象都从它继承。
答案 3 :(得分:0)
可能会低于代码帮助您。我不确定您是否要从客户端删除创建新对象并使其集中化。
您可以考虑以解耦方式提出要求 像..
interface IDBObject
{
string GetDBType()
}
then have your required classes and implement respect interface
public class SQLStoreProc:IDBObject
{
public string GetDBType()
{}
}
public class SQLFunction:IDBObject
{
public string GetDBType()
{}
}
public class SQLMisc:IDBObject
{
public string GetDBType()
{}
}
现在创建
的包装器或工厂类class clsFactory
{
public static IDBObject CreateObject(string type)
{
IDBObject ObjSelector = null;
switch (type)
{
case "SP":
ObjSelector = new SQLStoreProc();
break;
case "FUNC":
ObjSelector = new SQLFucntion();
break;
default:
ObjSelector = new SQLMisc();
break;
}
return ObjSelector;
}
}
现在在main方法中你可以有类似下面的内容
public static void main (args a)
{
IDBObject ObjIntrface = null;
ObjIntrface = clsFactory.CreateObject(your object type);
string res = ObjIntrface.GetDBType("First", "Second");
}