覆盖抽象类的属性?
背景: 我使用的是一组可以连接到CSV,AD,SharePoint,SQL,数据源类型。覆盖抽象类的属性?
我希望使用DBConnection对象的connectionString属性在基于文件的源上存储文件路径以传递给基于文件的数据源的GetData(DBConnection conn)
方法。 这不起作用,因为在为ConnectionStribg属性分配字符串时会发生一些验证。 我的问题: 如何创建我自己的DBConnection类派生的类(它是一个抽象类),只需添加一个名为ParameterString的属性?
tldr;我想从System.Data.Common.DBConnect
继承并添加我自己的字符串属性。怎么样?
编辑
界面如下:
public interface IDataImport
{
DbConnection CreateDbConnection(params string[] connectionString);
DataSet GetResults(DbConnection conn, params string[] strQuery);
DataTable GetAvailableTables(DbConnection conn);
DataTable GetAvailableFields(DbConnection conn, string tableName);
}
您可以从DBConnection的继承,但问题是,你将需要实施的所有继承的抽象成员(其中有22):
public class MyConnect : DBConnection
{
public string FilePaths{ get; set; }
//Still need to implement all of the
}
我假设您实际上想要利用内置的ADO类来处理DBConnection的实现,所以这不是一个好的选择。
也许你只需要分别跟踪信息。为什么信息必须是连接类的一部分,是否有特定的原因?
你可以做一些线沿线的:
public class MyConnectionInfo
{
public DBConnection Connection { get; set; }
public string FileNames { get; set; }
}
这将使信息在一起,但不是DBConnection的类的用法复杂化。
让你的抽象类太...
public abstract class MyClass:System.Data.Common.DBConnect
{
abstract String ParameterString
{
get; set;
}
}
如果你不希望你的类是抽象,然后从具体类继承它,或者重写抽象方法。没有第三个选择这里...
这将编译,但是海报正在使用的连接的实现情况如何?他将不得不重写所有这些才能连接到数据源。 – RQDQ 2011-03-07 14:24:12
DbConnection类是抽象的,所以你必须实现它的所有抽象方法。这里是什么样子:授予
protected override System.Data.Common.DbTransaction BeginDbTransaction(System.Data.IsolationLevel isolationLevel)
{
throw new System.NotImplementedException();
}
public override string ConnectionString
{
get
{
throw new System.NotImplementedException();
}
set
{
throw new System.NotImplementedException();
}
}
public override void ChangeDatabase(string databaseName)
{
throw new System.NotImplementedException();
}
public override void Close()
{
throw new System.NotImplementedException();
}
protected override System.Data.Common.DbCommand CreateDbCommand()
{
throw new System.NotImplementedException();
}
public override string DataSource
{
get { throw new System.NotImplementedException(); }
}
public override string Database
{
get { throw new System.NotImplementedException(); }
}
public override void Open()
{
throw new System.NotImplementedException();
}
public override string ServerVersion
{
get { throw new System.NotImplementedException(); }
}
public override System.Data.ConnectionState State
{
get { throw new System.NotImplementedException(); }
}
,你将不得不把正确的逻辑在每个都在下抛出异常的方法。
ConnectionString属性为您提供了有关如何覆盖属性的示例。如果您需要额外的属性,您可以将其添加到C#类的任何其他属性中。
谢谢丹。有一个upvote呢! :) – callisto 2011-03-07 14:48:05
感谢RQDQ:我终于用下面的课上做什么,我需要:
public class GenericConnection
{
public GenericConnection(){}
public DbConnection DBConn { get; set; }
public string Filename { get; set; }
}
正如你所看到的,我加了System.Data.Common.DBConnect作为属性,并添加字符串属性我也需要。
类的接口指定DBConnection作为类中使用的方法的参数:请参阅顶部的我的Q中的编辑。 – callisto 2011-03-07 14:50:44
你是否拥有这些课程?如果是这样,你让他们接受任何你想要的。如果你不这样做,那么就传入连接属性。 – RQDQ 2011-03-07 14:52:17
我确实拥有这些类和接口,但是我希望为开发人员提供一个统一的接口,以便在我之后使用它,这就是为什么我使用接口来强制实施每个数据源的类方法的原因。不过,我对其他建议非常乐观。 – callisto 2011-03-07 14:56:42