Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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#_Class_Graphics_Shapes - Fatal编程技术网

C# 创建具有颜色、大小和位置的类?

C# 创建具有颜色、大小和位置的类?,c#,class,graphics,shapes,C#,Class,Graphics,Shapes,我正在创建一个类,它只是一个带有颜色的矩形。 由于System.Drawing.Rectangle是密封类型,我无法执行以下操作: class Block : Rectangle { public Color Color { get; set; } public Block() { } } 这正是我需要的 那么,有没有办法得到类似的结果呢? 以下是我考虑过的几个选项: class Block { public Color Color { get; set; }

我正在创建一个类,它只是一个带有颜色的矩形。
由于
System.Drawing.Rectangle
是密封类型,我无法执行以下操作:

class Block : Rectangle
{
    public Color Color { get; set; }
    public Block() { }
}
这正是我需要的


那么,有没有办法得到类似的结果呢? 以下是我考虑过的几个选项:

class Block
{
    public Color Color { get; set; }
    public Rectangle Shape { get; set; }
    public Block() { }
}

class Block
{
    public Color Color { get; set; }
    public Size Size { get; set; }
    public Point Location { get; set; }
    public Block() { }
}

然而,我不能做像Block.X之类的事情,而且“重新实现”矩形感觉很愚蠢。有更好的解决方案吗?

不是说
Rectangle
是一个密封类,因为
Rectangle
根本不是一个类。它是一个结构:)。在C#中,不能从结构继承。这就是为什么您必须将其重新实现为一个类或找到一个类似的类。

我选择基本形状作为基类。输入基类中所有形状的共同点:

public abstract class ShapeBase
{
  public Point Coordinates {get; set;}
  public Color Color {get; set;}
}
然后从中得出:

public class Rectangle : ShapeBase
{
  public int Width {get; set;}
  public int Height {get; set;}
}

public class Block : Rectangle
{
  public Size Size {get; set;}
}

或者你对不同形状的要求

简单的回答是,您的自定义类型将拥有您需要跟踪的所有数据,然后它将以整洁的方式将其暴露给代码的其余部分。这是无法回答的-所有答案都将基于意见。您可以采取多种方法,但没有一种方法优于它。
System.Drawing.Rectangle
不是密封的,它是一种值类型(struct),因此它不可继承(通过类或结构)。您所拥有的任何一种方法都是好的,都可以达到它的目的。@RonBeyer
错误1'MyGame.Block':无法派生自密封类型'System.Drawing.矩形'F:\Skamah1\documents\visual studio 2013\Projects\MyGame\MyGame\Block.cs 5 11 MyGame
@RonBeyer我从来没有说过它是密封类,我说过它是密封类型。下面是我得到的错误:
error 1'MyGame.Block':无法从密封类型'System.Drawing.Rectangle'F:\Skamah1\documents\visualstudio 2013\Projects\MyGame\MyGame\Block.cs 5 11 MyGame
@SkamahOne抱歉,我误读了这个问题,但这并没有改变什么。您无法从结构中删除它,因此没有
nice
方法