2011-10-19 114 views
0

有沒有人知道它是否有可能在方法中傳遞一個類(在C#中)?c#=在方法中傳遞類變量

或者可能提供一些見解,說明我可以如何更好地解決/解決此問題,因爲它可能是「無法從樹上看到森林」類型的東西。

基本上,我有不同類型的對象,我正在處理(人,車,地點和物品),我想,讓用戶添加/編輯/查看/刪除

這些對象。爲了支持這一點,我創建了一個窗體(我稱之爲「ObjecctSelect窗體」),允許用戶從對象列表中選擇特定的對象(我將「對象類型」傳遞到窗體和窗體中然後知道創建這些對象的列表,用戶可以從中選擇...例如車輛)。一旦用戶選擇了一個對象,ObjectSelect表單就會調用另一個表單(根據對象類型的不同,我有一個AEVD_Vehicle表單,一個AEVD位置表單等),這將允許用戶添加/編輯/查看/刪除所選對象。

這實際上工作得很好,當我有對象「明確定義」,但現在我可能需要一些「自定義」對象,並希望我可以通過添加/編輯/查看/刪除「自定義對象「形式到我的」ObjectSelect「形式。我知道我可以傳遞一個類的實例(而不是類本身),但是我確實沒有構造函數信息,直到對象被選中爲止......或者用戶是否選擇了是否要添加,編輯,查看或刪除選定的對象。

順便說一句,我希望能夠傳入表單的另一個原因是我已將「objectSelect」表單放入正在由我們正在開發的多個應用程序使用的庫中。事實證明,根據我們處理的平臺,「AddEditDelete Object窗體」可能需要不同的製造商庫才能引用,我不希望我的「庫」引用所有這些製造商庫。 ......再加上這些製造商的處理方式不同例如,一些添加/編輯/查看/刪除表單包括條形碼掃描和圖片拍攝 - 有一家制造商,我必須在做另一家制造商之前關閉一臺,而另一家制造商則不需要做任何事情。 。

這有意義嗎?或者,我應該如何處理這個問題?

+0

你能總結一下你在僞代碼中需要什麼嗎? –

回答

0

我想我會開始接近這樣一個問題,通過考慮您想要對特定類型執行的所有不同的事情。從目前列出的內容來看,對於每種類型而言,您都有一種獲取數據的方式,以及使用相關表單編輯項目的方法。所以看起來有意義的做法是將所有的實現都放在一個特定的類型中,並將它們放入某種常見的結構中,然後使用該結構來完成工作。

例如,假設我們的兩種類型的對象是整數和字符串,而不是車輛等 然後,你可以做這樣的事情:

public interface IEditorForm 
{ 
    void SetItemToEdit(object item); 
    object GetModifiedItem(); 
} 

public class DataModifierFactory 
{ 
    public Func<IEnumerable<object>> GetData { get; set; } 
    public Func<IEditorForm> EditorFormFactory { get; set; } 
} 

//in your code, set up how the types will get handled 
//keep this registration of types and editor info on ObjectSelect form 
Dictionary<Type,DataModifierFactory> myModifiers = new Dictionary<Type,DataModifierFactory>(); 

Func<IEnumerable<object>> intDataSource =()=>{ return new int[] { 0,1,2,3 }; }; 
Func<IEditorForm> intEditorFormFactory =()=>new IntEditorForm(); 
myModifiers.Add(typeof(int), new DataModifierFactory(){GetData=intDataSource,EditorFormFactory=intEditorFormFactory}; 

Func<IEnumerable<object>> stringDataSource =()=>{ return new string[] { "A","B","C" }; }; 
Func<IEditorForm> stringDataFormFactory =()=>new StringEditorForm(); 
myModifiers.Add(typeof(string), new DataModifierFactory(){GetData=stringDataSource,EditorFormFactory=stringDataFormFactor}; 


//On object select form 
//this variable is set from above 
Dictionary<Type,DataModifierFactory> m_DataModifierFactoryRegistry; 
IEditorForm m_ItemEditorForm; 

public void ModifyDataOfType<T>() 
{ 
    DataModifierFactory factory = m_DataModifierFactoryRegistry[typeof(T)]; 
    myListOfData.Source = factory.GetData(); 
    m_ItemEditorForm = factory.EditorFormFactory(); 
} 

public void OnSelectedItemChanged(object newItem) 
{ 
    object oldItem = m_ItemEditorForm.GetModifiedItem(); 
    //save the old item, etc. Possibly another item on DataModiferFactory 
    //then set up for the next 
    m_ItemEditorForm.SetItemToEdit(newItem); 
} 

在任何情況下,應該瞭解基本的概念。而不是使用Func,你可以肯定有工廠作爲接口等。在WPF中,我知道我會嘗試使用泛型而不是對象來編輯項目表單等,但我不知道你的場景有多複雜。

這是否解決您的問題?