установки параметровНаследование Visual Basic класса в C# и первостепенных конструкторов, которые принимают дополнительные параметры
Большая часть нашего кода база находится в 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'
Прогресс до сих пор
У меня есть cr eated другого класса, xsToolboxTable, в C#, который наследуется xsTable и просто называют единственную строку конструктора, как так:
class xsToolboxTable : xsTable
{
public xsToolboxTable(string connectionString) : base(connectionString)
{
}
}
Однако, это означает, что я могу только создать экземпляр xsTable, но не экземпляр SharedCallsTable, так как они оба наследуют от тот же класс.
Я также попытался сделать мой класс расширения наследованием от SharedCallsTable, но тогда он дает мне то же самое.
я
SharedCallsTable не содержит конструктор, который принимает аргументы «1»
Что мне действительно нужно сделать, это позвонить в базу конструктора базового класса, то есть, Основой xsTableExtension является SharedCallsTable. Основой SharedCallsTable является xsTable, у которого есть единственный конструктор строк, который мне нужно использовать.
Я знаю, что это действительно запутанно, и может быть очень простое решение, которое я просто полностью отсутствует.
Это довольно сложно, поэтому, пожалуйста, несите меня.
+1. Разумный подход. – RichardOD
, потому что конструктор в SharedCallsTable предназначен для работы с другим конструктором в xsTable, который принимает целое число (обратите внимание на вызов MyBase.New (forceServerIndex: = sqlServerIndex). Конструктор xsTable, на который ссылается этот вызов, работает с INI-файлом, который хранит строка подключения. Таким образом, на самом деле вызов будет SharedCallsTable myTable = new SharedCallsTable (lErrString, false, -1); Это не сработает, потому что мы будем запускать это приложение с сетевого компьютера, у которого нет доступа к INI-файлу, и ему нужно вывести строки подключения из app.config. – Ryan
Thanks Greg, Я надеялся избежать добавления кода на сторону VB, но похоже, что это то, что мне нужно сделать. +1 – Ryan