Настройка
Большая часть нашей кодовой базы находится в VB.NET.Я разрабатываю проект на C #, который использует множество сборок из кода VB.NET.
В VB.NET есть три соответствующих класса:
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.
Существует много различных версий SharedCallsTable, которые работают с другими типами таблиц в нашей базе данных SQL, SharedCallsTable - это всего лишь один пример.
Проблема:
Я не могу создать экземпляр SharedCallsTable с помощью конструктора xsTable, который принимает в качестве конструктора одну строку, поскольку он вызывает конструктор mdTable, который имеет необязательный параметр (maxSecsToDisableConnection).C # не поддерживает необязательные параметры.
Поэтому, когда я делаю это:
SharedCallsTable myTable = new SharedCallsTable(connectionString);
, я получаю
SharedCallsTable не содержит конструктор, который принимает '1'Аргументы
Прогресс до настоящего времени
Я создал другой класс, xsToolboxTable, в C #, который наследует xsTable и просто вызывает однострочный конструктор, например, так:
class xsToolboxTable : xsTable
{
public xsToolboxTable(string connectionString) : base(connectionString)
{
}
}
Однако это означает, что я могу создавать только экземпляр xsTable, но не экземпляр SharedCallsTable, поскольку они оба наследуются от одного и того же класса.
Я также пытался заставить мой класс расширения наследовать от SharedCallsTable, но тогда это дает мне то же самое.
Я получаю
SharedCallsTable не содержит конструктор, который принимает аргументы '1'
Что я на самом деленужно сделать, это вызвать базу конструктора базового класса, то есть базой xsTableExtension является SharedCallsTable.Основой SharedCallsTable является xsTable, который имеет однострочный конструктор, который мне нужно использовать.
Я знаю, что это действительно запутанно, и может быть действительно простое решение, которое я просто полностью упускаю.
Это довольно сложно, поэтому, пожалуйста, потерпите меня.