2009-11-23 42 views
1

我是vb.net的新手,非常沮喪。有關類,模塊和交互的基本問題

像所有優秀的程序員一樣,我想根據功能將我的代碼拆分爲單獨的文件。我的一些代碼通過表單與用戶交互,一些代碼與幕後的實驗室設備交互(無需用戶直接交互)。有時用戶會改變會影響實驗室設備的東西,有時用戶需要注意的實驗室設備會發生什麼情況。當我使用VS創建文件時,我必須選擇一個模塊或表單。 VS然後創建一個空文件具有與任一

公共類Foo

末級

模塊的Foo

前端模塊

如果我有一堆文件,每個模塊,如果我定義模塊中的例程是朋友,那麼我可以從其他模塊調用它們,所以:

模塊美孚

Friend Sub DoSomeWork() 

End Sub 

前端模塊

碼費可以調用子程序中富 -

模塊費

Friend Sub Stuff() 

DoSomeWork() 

End SUb 

前端模塊

當我創建一個表格,VS cre ates a Class。我發現我可以調用在一個模塊從一個類定義的子程序,但是當我嘗試從一個模塊調用到一個類時,我得到一個錯誤,我試圖調用的例程沒有聲明。我也不能從一個類調用另一個類。聲明似乎只適用於我的程序之外的庫例程。

我已經瀏覽了幾個在線解釋和教程,但坦率地說,我不明白這些,也不關心「從基類繼承」和所有其他的這些「解釋」包含的gobbledygook。我想專注於構建我的應用程序。

我的主要形式的名稱爲「主」

我試圖把所有的模塊代碼到主類第一重命名「模塊富」到「公共部分類主營」 - 壞主意 - 創建一個impossible-找到重複的錯誤。我試圖創建空的代碼文件,將它們定義爲Public Partial Class Main並將Module代碼放入它們中 - 這可以在Class Main中的代碼中調用「Module」代碼(現在在Main中),反之亦然,但是,其他窗體(當然我有多個)由VS創建並擁有自己的類,並且一旦「模塊」代碼從模塊移出到主類中,其他表單(類)就不能再調用該代碼。

我只想要一些配方(最佳實踐)我可以按照以定義模塊和類,以便代碼和數據可以共享。從下面

要在其他類中調用一個子程序

回答您只需把類的名字在子程序名稱前。

所以不

DoSomeWork()

Foo.DoSOmeWork()

各位有經驗的程序員,但不是我,這可能是顯而易見的。您不必爲模塊到模塊調用或類到模塊調用預先添加類/模塊名稱,而只需調用到類中的調用。就個人而言,爲了保持一致性,我認爲事情應該是一樣的,但它可能會違反一些OO規則。無論如何,謝謝大家。

+2

說像VB編碼器... – 2009-11-23 20:48:21

+0

我建議你離開VB和學習一個C變種(C#,因爲它的.NET版本,到目前爲止,你學到的東西可以在C#應用) – Omar 2009-11-24 05:58:54

回答

0

通常,如果您需要從多個窗體或窗體和模塊調用函數,請將其放在主模塊中。如果你有一個特殊的情況下,需要調用從另一種形式或模塊形式的函數或子,你可以將它聲明爲public:

Public Class Form1 
public sub test(i as integer) 
... 
end sub 
end class 

,然後你可以參照類調用它.subname:

call form1.test(7) 
+0

謝謝!謝謝!謝謝! – NormD 2009-11-24 05:31:27

0

NomD,

像所有優秀的程序員

你確實應該關心

約和其他所有的官樣文章,這樣的 「解釋」, 「從基類繼承」

This wil l讓你成爲更好的程序員,花時間理解爲什麼正確的代碼結構很重要,也會開始爲你帶來更好的結果。

+0

所以,你知道OOP,對嗎?所以請解釋爲什麼我不能從一個Module中調用一個類。 – NormD 2009-11-23 23:43:52

+0

@NormD:你寫了很多東西,我多次閱讀,但我還是不太明白問題所在。很難說如果你正在實例化類或調用靜態方法等。一些實際的代碼和錯誤輸出將是有用的。 – 2009-11-24 01:26:52

-1

看起來好像你不瞭解面向對象編程(OOP)的基礎知識。

如果您不想學習如何以面向對象的方式設計您的應用程序,那麼只需在您的應用程序中創建模塊,並且您將能夠在不出現任何問題的情況下從一個到另一個調用功能。但是這會導致代碼不易維護和擴展。

另一種選擇是通過選擇一本關於它的書來學習OOP,或遵循關於該主題的課程或教程。這是一項重大投資,但它會產生更健壯的代碼,在應用程序增長時可以更好地擴展。

+0

我的應用程序在這個時候不需要擴展和可維護性不是必需的(這是一個原型)。我只是創建模塊,但我不得不添加一些表格和表格作爲類添加,所以我需要在類中的代碼與模塊中的代碼交互。我已經閱讀了關於面向對象的書籍,並且已經完成了教程,但是當你必須完成真實世界的工作時,這些東西似乎總是處於抽象層面上的事情上,而這種抽象層次上的事情失敗我想起數據庫純粹主義者,堅持一切是第三範式...謝謝你的答覆。 – NormD 2009-11-23 23:52:38

+0

downvote的原因:不解決問題。這更多的意見在評論中會更好。 – xpda 2009-11-24 06:01:12

+0

xpda:感謝您爲downvote留下理由。我正要編輯他的具體問題的解釋,但我看到你解決了他的問題;-) – 2009-11-24 14:07:10

0

我不知道爲什麼兩個評論者似乎有與VB.Net的問題。不管語言如何,問題都是一樣的,因爲C#和VB都建立在.Net上。代碼可以用C#編寫得很差,就像VB一樣。請把語言戰爭留在家裏。 NormD,你的問題的答案應該是引導你到更好地理解問題所需的資源。這裏有一篇關於範圍的文章,可能有點幫助 - class scope。你得到你所看到的行爲的原因是由於你正在與之合作。模塊(類似於C#中的靜態類)在編程開始時創建,因此不需要創建它們。所以你可以在模塊上引用一個方法,就像這樣 - module.method。另一方面,一些例外情況需要被創建以便被引用。因此,要使用員工(或表單類),您必須創建該類的變量。所以你可以使用dim myemp作爲新的Employee(),然後從你的模塊中調用myemp.method()。這是一個相當簡單的描述,所以請閱讀範圍文章和其他MSDN文章以獲取更多信息。我相信其他海報可以發佈額外的鏈接和良好的信息。希望這個對你有幫助。

韋德