我只有兩年的時間開始編程(主要是C#),但仍然有很多我不懂的語言,我試圖翻譯一個從VB.NET代碼到C#代碼的Web項目,但我到了一個我不知道如何翻譯的部分。翻譯爲C#代碼使用類方法通過一個對象變量
VB代碼中的類使用子過程對數據庫執行INSERT,爲此,在類中存在一個聲明爲Object的db變量,然後db變量使用模塊中的函數根據連接類型更改類的類型,並且將使用數據庫(這是通過從Web.config文件獲取值確定的),然後在構建查詢之後,db變量使用分配的新類類型中的另一個函數執行查詢。
爲了更好地說明問題,這裏是VB代碼。
這是其中使用分貝可變的部分:
Public class MyClass1
Private Sub _AddDB()
Dim db As Object
Dim query As String
db = TypeDB()
query = "Some Query"
db.ExecuteDB(query)
End Sub
End Class
正如我所說,TypeDB()函數是在一個模塊:
Module MyModule
Public Function TypeDB() As Object
Dim Str As String = ConfigurationSettings.AppSettings.GetValues("strConnDB").GetValue(0)
Dim db As Object
Select Case Str
Case "SQL"
db = New DBSql_Class
Case "ODBC"
db = New DBOdbc_Class
Case "OLE"
db = New DBOle_Class
End Select
TypeDB = db
End Function
End Module
每個上提到的類的模塊有它自己的ExecuteDB函數,因此在執行db.ExecuteDB(query)行時沒有問題。我讀的是最接近C#中的模塊是一個靜態類,所以這是我做什麼用MyModule的,我已經有了類的休息,但是當我嘗試:
public class MyClass1
{
private void _AddDB()
{
object db;
string query;
db = MyModuleClass.TypeDB();
query = "Some Query";
db.ExecuteDB(query);
}
}
我立即得到錯誤,數據庫objetc不包含方法ExecuteDB的定義。
我的第一個想法是在_AddDB方法內部執行一個switch語句,但它不會是最優的,因爲MyModuleClass中已經有一個switch語句爲db變量選擇新類型,我嘗試搜索爲解決方案,但我發現只有解決方案只使用一個類。
我想盡可能地接近最初的項目,但這種交互方式遍佈VB項目。
我會試試這個,但是三個DB類已經從另一個類繼承了,我可以從接口添加繼承嗎?,至於名字,是的,他們是可怕的,但我在辦公室,他們是第一個彈出我腦海中的名字:) –
我做了一些快速搜索,我看到我可以從其他的繼承類和從接口的實現,我會盡快嘗試一下,我有一些空閒時間 –
@ G.Torres:是的,從技術上講,如果他們繼承了一個共同的基礎,你可以使其抽象,添加'抽象'方法'ExecuteDB '去那個基地班。然後返回類型的'TypeDB'方法可以是該基類。但是從乾淨代碼的角度來看,我更喜歡界面。 :-) –