我正在为我的OOP介绍纸牌游戏。游戏本身符合规格,但我现在正在玩它以获得自己的满足和学习。
我有一个包含和图像的卡片类,它的等级和套件。在GUI上我使用图片框来显示存储在相应卡片中的图像(存储在卡片类中的卡片阵列中),所以,
cardPictureBox1.Image = card1.show();
cardPictureBox2.Image = card2.show();
cardPictureBox3.Image = card3.show();
...
etc
是否可以使卡类继承PictureBox控件,因此屏幕上的内容实际上是卡calss的一个实例(而不是一个包含它的图像值的框),这将大大减少他必须跳过一定数量的箍来获得其他相关信息。
答案 0 :(得分:3)
您可以创建一个继承自PictureBox的UserControl(名为Card或ucCard或其他),而不是继承自UserControl,而不是拥有Card类。在C#中执行此操作的最简单方法是使用所需名称添加UserControl,然后在代码中更改顶行
public partial class ucCard : UserControl
到
public partial class ucCard : PictureBox
您的ucCard控件将具有PictureBox的所有属性(包括Image,您将存储卡的位图)。在构建项目时,编译器将在引用AutoScaleMode的行上进行barf - 只需删除此行并重建。
然后,您可以添加卡片所需的任何其他属性和方法,例如卡片正面和背面的套装和等级以及位图(背面可以是静态的,以便所有卡片可以共享它),也可以是翻转( )在前后图像之间切换的方法。
就OOP而言,神圣三位一体中被遗忘的部分似乎是封装。在这种情况下,由于卡是用户与之交互的UI中的可视元素,因此将其封装为UserControl是完全合理的。正如您已经注意到的,这将使应用程序更简单,您的生活更轻松。
答案 1 :(得分:2)
是否可以制作卡片 class an继承PictureBox 控制所以屏幕上是什么 “实际上”是卡片的一个实例 calss(而不是一个容纳的人 它的图像价值) 戏剧性地减少了他的篮球数量 一个人必须跳过去 获得其他相关信息。
是的,但你想要吗?不。它将您的业务逻辑和模型非常紧密地耦合到您的GUI层。
如果您正在撰写关于OOP的论文,您应该鼓励良好的编程习惯并且不鼓励偷工减料。你可以更好地制作一个快速MVC,这样当你对模型进行更改时,你的GUI就会自动更新。