Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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# 向按钮控件c添加自定义属性#_C#_Oop_Button_Properties_Controls - Fatal编程技术网

C# 向按钮控件c添加自定义属性#

C# 向按钮控件c添加自定义属性#,c#,oop,button,properties,controls,C#,Oop,Button,Properties,Controls,我正在建立一个可能完成75%的国际象棋游戏,这是一个没有计划的冲动,因此非常混乱 我有三个多维数组,一个包含enumcolor,另一个包含enumChessPiece,最后一个包含坐标 我想把这件事弄清楚,我能想到两件事 1) 面向对象编程。我可以用属性颜色、坐标和棋子构建一个类,然后在游戏开始时实例化每个棋子,并引用每个实例 2) 一个简单得多的方法是,我可以向按钮控件添加一个属性,类似于类的属性。即 button1.Piece=典当其中button1指实际按钮 有办法做到这一点吗?谢谢。简单

我正在建立一个可能完成75%的国际象棋游戏,这是一个没有计划的冲动,因此非常混乱

我有三个多维数组,一个包含enum
color
,另一个包含enum
ChessPiece
,最后一个包含坐标

我想把这件事弄清楚,我能想到两件事

1) 面向对象编程。我可以用属性颜色、坐标和棋子构建一个类,然后在游戏开始时实例化每个棋子,并引用每个实例

2) 一个简单得多的方法是,我可以向按钮控件添加一个属性,类似于类的属性。即
button1.Piece=典当
其中button1指实际按钮


有办法做到这一点吗?谢谢。

简单到:

public class ChessButton : Button
{
    public ChessPiece { get; set; }
}

显然,你需要扩展ChessButton(可怕的名字)来做你想做的事。

好吧,如果你采用第一种方法(在o-o范式中做事情),我可以想象你可以提出一个相当简洁的模型。我可以设想一个基类工件,它可以由Prawn、Rook、Bishop等类继承,这可能会实现移动工件的“规则”。类似地,我可以想象一个类Tile和另一个类(包含一个二维Tile数组)Board。等等等等

因此,你最终可以把它想象成非常整洁/漂亮。你必须考虑所有这些类,了解它们做什么以及它们如何与其他类交互。因此,它有一个设计元素,这是一个潜在的缺点——必须提前思考,而没有任何实际收益——你几乎在为你的应用程序构建一个基础设施。但是如果你把代码交给某人,他们很有希望能够很容易地知道发生了什么。所以它是可维护的。o-o方法有很大的好处

第二种方法(扩展ui类)。嗯,正如你所说,这似乎容易得多。如果这个应用程序足够简单的话,也许这就是出路

但你也说,到目前为止,你做的事情都是临时性的,而且非常混乱。你所遇到的是典型的ui开发——当你用非结构化方法构建东西时,事情会变得一团糟。多年来,人们投入了大量的时间和金钱,试图在前端添加结构,以提高可维护性。你把这个问题贴上c的标签,也许你听说过微软的MVC、MVVM或MVP之类的东西。您不一定需要详细地研究这些方法,您只需要理解它们存在的原因——尝试并划分UI代码以使其更易于管理

既然您在这里还说您的动机之一是清理代码,那么我建议您将一些想法放在结构化方法中,而不是默认采用“简单得多”的方法


如果你想一想,决定只是延长一个按钮,很好。之所以选择它而不是结构化方法,是因为结构化方法需要付出太多的努力。但至少你考虑过了。在未来,您将遇到更复杂的ui需求,这种预先考虑将带来好处。

您可以创建一个继承自
按钮的新类<代码>片段
将是一个属性,而不是一个属性。@DanielKelley Kelley好的,我的术语错了吗?wikipedia的文章指出
类包含数据字段描述(或属性、字段、数据成员或属性)。
我认为这意味着属性与属性同义。C#上下文中的属性与可以与类或结构关联的元数据相关。我喜欢这个答案,感谢您的回答。下个月我将开始攻读理科(计算机科学)学士学位,所以我认为学习使代码结构化和整洁将是一件好事。课程是C++,不是C语言,我只知道C语言。但我认为继续我的C#冒险直到它开始会有一些好处。很高兴它有帮助。在很少的情况下,你将编写代码,性能绝对是关键的(你肯定会发现C++中的代码比C语言中的代码多,因为它更接近硬件),但实际上,99%的时间,驱动程序是清晰和可维护的。我参与的项目类型(大-数人年的定制工作),这确实是最好的方式。您几乎需要从这一默认位置开始,然后说“现在这是否足够简单,我可以采取精简的方法?”另外要添加的是重用方面。当你决定重写一个草稿/跳棋游戏时,想想你能重用什么。许多人会说可重用性是o-o的一大特点,但实际上,如果可以理解的话,有些东西更可重用!