C#=传递类变量的方法

是否有人知道其可能在一个方法传递一个类(在C#)?

或者,也许有助于了解我怎么可能会更好地解决/解决这个问题,因为它可能是一个“不能看到树木,不见森林”类型的东西。

基本上,我有不同类型的对象,我正在接听(人,车,地点和物品),我想,让用户添加/编辑/查看/删除

这些对象。 为了支持这一点,我创建了一种形式(我将称之为“ObjecctSelect表”),允许用户从对象列表中选择一个特定的对象(我通过“对象类型”为形式和形式然后知道创建这些对象从该用户可以选择......诸如车辆)的列表。 一旦用户选择了一个对象时,ObjectSelect形式然后调用另一种形式(这取决于对象类型,因为我有一个AEVD_Vehicle形式,一个AEVD位置形式等),这将允许用户添加/编辑/查看/删除选定的对象。

这实际上工作得很好,当我有对象“明确的”,但现在我可能有一些“定制”对象的需要,并希望我能在添加/编辑/查看合格/删除“自定义对象”的形式进入我的“ObjectSelect”的形式。 我知道我可以传递一个类的实例(不是类本身),但我真的,直到选定的对象没有构造信息......或者用户是否选择他是否要添加,编辑,视图或删除所选择的对象。

顺便说一句,另一个原因我希望能够传递到一个形式,我已经把“objectSelect”的形式在其中正在使用由我们正在开发几个应用程序库。 事实证明,这取决于我们正在处理中,“AddEditDelete对象表”的平台上,可能需要被它引用的不同厂商的库,我不希望有我的“图书馆”参考所有这些制造商库。 ...加上这些厂家处理不同的事情。 例如,一些添加/编辑/查看/删除形式包括条码扫描和到拍摄 - 一个制造商,我有做其他的,而对于其他制造商前打开一关,我不需要做任何事情.. 。

这是否有意义? 还是有不同的/更好的办法我应该处理这个?

--------------解决方案-------------

我想,我会开始接近这样的问题是考虑所有你想与特定类型做不同的事情。 从你所上市至今,它听起来就像每种类型,你有办法来获取数据,并与相关的表单编辑项目的方式。 那么,现在看来似乎是明智的做的就是把所有的实现围绕一个特定的类型和它放入某种共同的结构,然后使用该结构做的工作。

例如,假设我们的两种类型的对象是整数和字符串,而不是车辆等。然后,你可以做这样的事情:

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中,我知道我会尝试使用仿制药,而不是对象项编辑器的形式等,但我不知道您的情况多么复杂。

这是否解决问题了吗?

分类:C# 时间:2015-03-15 人气:0
本文关键词: 目的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.542 (s). 10 q(s)