【问题标题】:Is there a way to add additional values to the rectangle struct?有没有办法向矩形结构添加附加值?
【发布时间】:2018-08-28 21:28:56
【问题描述】:

我想给一个矩形添加额外的值。例如“名称”字符串。

类似这样的:

Rectangle MyRectangle = new Rectangle(Y, X, Width, Height, Name)

这可能吗?

【问题讨论】:

  • 就用继承,创建一个MyRectangle: Rectangle类并添加属性,试试看,有问题再问
  • 您是否尝试过按照您的建议修改现有结构,或者尝试使用您自己的结构扩展Rectangle 结构?编译器告诉你什么?

标签: c# rectangles


【解决方案1】:

Rectangle 类中有两个重载构造函数。

public Rectangle(Point location, Size size);
public Rectangle(int x, int y, int width, int height);

但是Rectangle类中没有构造函数参数new Rectangle([int], [int], [int], [int], [string])

你可以尝试在类中使用复合public Rectangle rect { get; set; }属性。

然后使用构造函数设置Rectangle对象和Name

public class CustomerRectangle 
{
    public Rectangle Rect { get; set; }
    public string Name { get; set; }
    public CustomerRectangle(int llx, int lly, int urx, int ury,string name) 
    {
        Rect = new Rectangle(llx, lly, urx, ury);
        Name = name;
    }
}

那么你可以使用

CustomerRectangle  MyRectangle = new CustomerRectangle (Y, X, Width, Height, Name);

//MyRectangle.Name; use Name property 
//MyRectangle.Rect; use Rectangle

【讨论】:

  • 我认为你不能从结构继承。见:stackoverflow.com/questions/1222935/…
  • System.Drawing.Rectangle 是一个结构,而不是一个。您可以使用组合并使用所需的其他成员定义新结构(或类,根据需要),但不幸的是,它不会与 System.Drawing.Rectangle 多态。
  • 是的,你是对的,我把它弄丢了。我编辑我的答案谢谢。
  • 感谢这帮了大忙!
【解决方案2】:

我假设您正在使用 System.Drawing 命名空间中的构造函数: https://docs.microsoft.com/en-us/dotnet/api/system.drawing.rectangle?view=netframework-4.7.2

无法向该结构添加额外字段。您可以做的是创建自己的包含更多内容的类或结构。

public class NamedRectangle
{
    public string Name { get; set; }

    public double X { get; set; }

    public double Y { get; set; }

    public double Width { get; set; }

    public double Height { get; set; }

    public NamedRectangle(double x, double y, double width, double height, string name)
    {
        Name = name;
        X = x;
        Y = y;
        Width = width;
        Height = height;
    }
}

【讨论】:

  • 你可以把它变成一个结构——它不需要是一个类。或者,正如其他人提到的那样,您可以简单地创建一个结构或类,它由一个 Rectangle 和一个字符串组成,并模仿现有的 Rectangular 签名和行为(但是,它不会是一个 Rectangle)
【解决方案3】:

我看到其他人提供了很好的示例,但如果出现Cannot inherit from sealed type 错误,以下示例可能会对您有所帮助:

public class myRectangle
{

    private Rectangle newRectangle = new Rectangle();
    private string name;

    public myRectangle Rectangle(Int32 Y, Int32 X, Int32 Height, Int32 Width, string name )
    {
       newRectangle.Y = Y;
       newRectangle.X = X;
       newRectangle.Height = Height;
       newRectangle.Width = Width;
       this.name = name;

       return this;
    }
}

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多