2012-10-22 132 views
0

我(作爲新的oop和c#hobbiist)想要就以下(簡化)問題尋求一些指導:作爲屬性的對象?

我已經做了一個小類(讓我們稱之爲A),有4個屬性,和很少的方法。也是一個更大的類(B)〜10 props,它應該包含12個A類對象,並且有相當多的功能可以與道具一起玩。我有我的主類M(這是一個Windows窗體),一個Filereader類(F)來處理所有的I/O。

我在wm_devicechange上做了一個windows事件,應該讀取usb,製作F的一個對象。現在,當F讀取文件時,它應該填充類B中創建的對象的屬性F.現在的問題是,我不能從我的主類訪問B的這個對象。問題是如何做到這一點?

我應該做一個屬於B型的F屬性嗎?這是常見的做法嗎? 我應該在我的主課堂中做B的對象嗎? 當在B類型的F中創建一個屬性時,如果從M中獲取,是否只存儲和傳遞參考?

我想盡量避免對象的無用複製等,但是這個話題對我來說是非常重要的,即使在幾本書之後,我甚至不確定這個問題是否有很大的意義。我已閱讀this文章3次,但我仍然困惑處理這樣一個「問題」的好做法是什麼?

感謝

+1

我已經讀過你的問題,如3-4次,仍然無法弄清楚究竟是什麼問題。請發佈一些代碼。 – LightStriker

+0

嘗試創建一個簡單且自包含的* code *示例,幫助解釋您已完成的工作以及要求的內容,並將其發佈到此處。 =) –

+0

如果你顯示你的類型定義,這個問題將更容易回答。 – Jodrell

回答

1
public class Form 
{ 
    USBReader reader; 
    CollectedData data; 
    public Form() 
    { 
     reader = new USBReader(); 
    } 

    public void ReadUSBData() 
    { 
     data = reader.ReadUSBData(); 
    } 
} 
// Type F 
public class USBReader 
{ 
    public CollectedData ReadUSBData() 
    { // usb read logic. 
    } 
} 

//Type B 
public class CollectedData { 
    List<A> list = new List<A>(); 
} 

public class A { } 

一個簡單的實現可以像這樣你的USB閱讀器返回數據。

通常,像讀取數據這樣的動作是對象上的方法,它帶有返回類型的數據模型(這裏是B和A)。屬性是對象的屬性。例如USBReader可以有一個自我解釋的名稱,如int BufferSize;

+0

我現在正盯着你的答案,我認爲它是我正在尋找的那個。如果我理解正確,我將能夠從我的Form類訪問所有getter setters和'data'的公共函數? – Onsightfree

+1

在此期間我已經嘗試過它,它的工作原理非常奇妙。關於這個環節,如果第二起案件發生在這裏,那麼我完全明白髮生了什麼事情。 http://rapidapplicationdevelopment.blogspot.de/2007/01/parameter-passing-in-c.html - 所以我接受你的解答作爲答案,非常感謝NileshChauhan – Onsightfree

+0

確實如此。 reader.ReadUSBData()在內存中創建一個對象,其地址返回並最終在數據中捕獲。您可以使用哪些數據作爲句柄進一步操作。 – NileshChauhan

0

你不會浪費的對象分配空間,因爲所有 對象 類在C#是reference types。然而,在我看來,你應該inheritancenested classes

之間 決定繼承,你會做這樣的事情:

public class F : B 
{ 
    //class F definition here 
} 

對於嵌套類,你將有:

public class F 
{ 
    public class B 
    { 
    } 
} 
+0

也有價值類型的對象。 – user1610015

+0

抱歉,你是對的,將修改我的答案。 – rexcfnghk

0

如果分配對象,它只是參考,所以同樣的例子。如果您需要在兩個對象之間共享對象,請將該對象作爲參數傳遞給構造函數或某個方法/屬性。然後,所有具有此引用的對象都可以訪問相同的實例(數據)。如果您需要不同的「數據集」 - 實例,只需創建其他對象實例...

+0

感謝您的回答,這是我的想法,但從來不敢寫自己 – Onsightfree

1

您提到的所有方法都是合理的,但其中一個方法可能會更加直觀和優雅。

B類究竟是什麼?如果這是讀取文件的某種結果,那麼您可能希望從執行讀取的某種F方法中返回它。

+0

這個B類應該包含我從USB讀取的大部分信息。然後根據用戶輸入我即將操縱數據,幾步後,我會覆蓋USB上的文件。 表格處理用戶輸入,但軟件的核心應該是用最小化讀寫操作來處理一些文件。 – Onsightfree

+0

然後我認爲你應該在USB閱讀器類的構造函數中進行所有閱讀,並將信息存儲在B對象中,這應該是USB閱讀器類的屬性。 – user1610015

+0

感謝您的回覆,如果可以的話,我很可能會讚揚您的答案,但是錯過了15個repu。我認爲它也幫助我理解,就像NileshChauhan的回答 – Onsightfree