セットアップ
私たちのコード ベースのほとんどは VB.NET にあります。VB.NET コードの多くのアセンブリを使用する C# でプロジェクトを開発しています。
VB.NET には関連する 3 つのクラスがあります。
Public MustInherit Class mdTable
Public Sub New(ByVal sqlConnectionStr As String, Optional ByVal maxSecsToDisableConnection As Integer = 60)
ReDim pConnStr(0)
pConnStr(0) = sqlConnectionStr
pDBName = parseDBName(sqlConnectionStr)
m_colLastConnectStatus.disablePeriod = maxSecsToDisableConnection
End Sub
Public MustInherit Class xsTable //uses the constructor above since second parameter is optional
Inherits mdTable
Public Sub New(ByVal sqlConnectionString As String)
MyBase.New(sqlConnectionString)
End Sub
Public Class SharedCallsTable //the only constructor available in this class
Inherits xsTable
Public Sub New(Optional ByRef lErrStr As String = "", _
Optional ByVal checkTableExists As Boolean = False, _
Optional ByVal sqlServerIndex As Integer = -1)
MyBase.New(forceServerIndex:=sqlServerIndex)
defineTable(DBUser, checkTableExists)
lErrStr &= CStr(IIf(errStr <> "", vbCrLf & errStr, ""))
End Sub
もちろん、これらはすべて Visual Basic で作成されています。
SQL データベースの他のテーブル タイプを処理する SharedCallsTable にはさまざまなバージョンがあります。SharedCallsTable はその一例にすぎません。
問題:
オプションのパラメーター (maxSecsToDisableConnection) を持つ mdTable コンストラクターを呼び出すため、単一の文字列をコンストラクターとして受け取る xsTable コンストラクターを使用して SharedCallsTable のインスタンスを作成することはできません。C# は省略可能なパラメーターをサポートしていません。
だから私はこれを行うとき:
SharedCallsTable myTable = new SharedCallsTable(connectionString);
私は得る
SharedCallsTable には、'1' 引数を取るコンストラクターが含まれていません
これまでの進捗
xsTable を継承し、次のように単一の文字列コンストラクターを呼び出すだけの別のクラス xsToolboxTable を C# で作成しました。
class xsToolboxTable : xsTable
{
public xsToolboxTable(string connectionString) : base(connectionString)
{
}
}
ただし、これは xsTable のみをインスタンス化でき、SharedCallsTable のインスタンスは両方とも同じクラスから継承されるためインスタンス化できないことを意味します。
また、拡張クラスを SharedCallsTable から継承させようとしましたが、同じ結果になります。
私は得る
SharedCallsTable には、'1' 引数を取るコンストラクターが含まれていません
本当に必要なのは、基本クラス コンストラクターのベースを呼び出すことです。つまり、xsTableExtension のベースは SharedCallsTable です。SharedCallsTable のベースは、使用する必要がある単一の文字列コンストラクターを持つ xsTable です。
私はこれが本当に複雑で、私が完全に見逃している本当に単純な解決策があるかもしれないことを知っています.
これはちょっと複雑ですので、ご容赦ください。