2009-08-06 123 views
0

我怎样才能让一个类型的引用,所以我可以用myreference名字后来......在其最简单的形式...定义基于自己的类型上的现有类型

敏 - 源自INT

然后,在其他地方,我会参考MyInt。踢球者是我需要这个“#define”分别在类定义中,它将被分类并可能是不同的类型。其实际意图是

MyTypeSQLCmd = OleDbCommand 
OR 
MyTypeSQLCmd = SQLiteCommand 

和我的子类只是指,并能够创建一个新的MyTypeSQLCmd();

---让我多说一点。

我有一个类连接到OleDB类型的数据库。 我有另一个类连接到SQLite数据库。

我有另一个类将从上面的任何一个派生,但将具有附加功能。因此,而不是知道哪个后端我将连接到,我不希望有IF的所有的地方一样......

if(connectingToSQLite) 
    MyCmd = new SQLiteCommand(); 
else 
    MyCmd = new OleDbCommand(); 

,因为随后,可用常用的方法,我需要是相同的参考文献,如

MyCmd.Parameters.Add(...)

所以,我不能预先声明变量为一个 “类型” 或另一个如

的OleDbCommand MyCmd; SQLiteCommand MyCmd;

我只想要一个实例,所以我希望得到一种“别名”类型,它将被接受并允许在没有编译器错误的情况下继续。

回答

2

你是不是真的找一个接口,即IDbCommand

+0

通过“转到定义”了继承链,我想我明白你的意思,并认为这会工作。 ..如果成功,我会标志。 – DRapp 2009-08-06 13:21:34

1

您可以从中继承或使用using声明。

using SomeClass = SomeOtherClass; 
1

使用泛型:

class SubClass<MyTypeSQLCmd> where MyTypeSQLCmd : IDbCommand, new { 
    ... 
} 

现在的类可以创建类型的实例,并使用在所有的方法IDbCommand接口。您可以为任何数据库命令类型创建类的实例。

+0

+1,这种方法效果很好。我也使用它... – Steve 2009-08-06 14:57:39

0

如果您正在寻找类似于C typedef的东西,那么虽然文件顶部有using语句可能,但它通常不是最理想的解决方案。这种情况的想法是“编程到界面”。也就是说,您可以找到一个超类或接口来实现您正在查找的功能(在本例中分别为System.Data.Common.DbCommandSystem.Data.IDbCommand)并对其进行编程。然后,您实例更具体类型(如SqlCommandOleDbCommand表示具体实现使用。

相关问题