Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将一个类绑定到另一个类';s属性_C#_Architecture_Parameters_Properties - Fatal编程技术网

C# 将一个类绑定到另一个类';s属性

C# 将一个类绑定到另一个类';s属性,c#,architecture,parameters,properties,C#,Architecture,Parameters,Properties,标题听起来可能有点奇怪,因此我将尝试解释我的问题: 假设我有一个类包含一些信息: class InfoHolder { public int MyInfo1 {get; set;} public int MyInfo2 { get; set; } } 然后我有另一个类,它用一个信息做一些事情: class InfoGUIRepresenter { // Display an int in some kind of GUI // Allow the user to change

标题听起来可能有点奇怪,因此我将尝试解释我的问题:

假设我有一个类包含一些信息:

class InfoHolder
{
  public int MyInfo1 {get; set;}
  public int MyInfo2 { get; set; }
}
然后我有另一个类,它用一个信息做一些事情:

class InfoGUIRepresenter
{
  // Display an int in some kind of GUI
  // Allow the user to change the int via the GUI
}
现在,我需要representer类的两个对象来向用户公开我的Info类:两个infos中的每一个都有一个representer。为了实现这一点,最好将每个属性作为某种“参数”传递给我的representer类。 当然,这在C#中是不可能的。另一个解决方案是传递属性的名称,然后使用反射来访问它们——这不是很好

有什么解决办法吗?也许是某种解决这类问题的架构?
谢谢

一个选项是传递两个委托-一个用于setter,一个用于getter:

var holder = new InfoHolder();

var representer = new InfoGUIRepresenter(() => holder.MyInfo1,
                                         value => holder.MyInfo1 = value);

然后,您的
InfoGUIRepresenter
构造函数将执行
Func
操作。(或者,对于不同类型的属性,您可以将representer设置为通用的。)

您提到“在某种GUI中”显示,这意味着您正在使用GUI框架。当然,该框架支持针对这种情况定义良好的模型。例如,如果您使用的是WPF(您的信息对象是模型,您的UI是视图,您可以通过绑定到UI元素属性的视图模型属性从视图绑定到模型)。也就是说,你不是想在这里重新发明轮子吗?

实际上,GUI框架是我自己编写的。它基本上是在GDI画布上绘制的一些矩形。所以它不支持任何东西(至少现在是这样);-)好吧,很公平——我想你有理由走这条路——但听起来你前面还有相当多的工作和维护。