何时使用“;新的“;c#中带有structs的关键字

本文关键字:structs 关键字 新的 何时使 | 更新日期: 2023-09-27 18:28:02

我正在使用GDI+,需要创建Brush或Pen。在大多数情况下,我应该使用"color Struct"。四处搜索,我看到了两种不同的风格:一种是这样的:

 Brush B1 = new SolidBrush(Color.FromArgb(255, 0, 0));

另一种是:

Color myColor;
myColor = Color.FromArgb(255,0,0);
Brush B2 = new SolidBrush(myColor);

有人能描述一下我们如何在不使用调用默认构造函数的新运算符声明Struct实例的情况下使用Color吗。

何时使用“;新的“;c#中带有structs的关键字

这里所发生的一切都是有趣的构造函数是非公共的,您必须通过static实用程序方法创建值。你可以在自己的代码中琐碎地实现同样的事情:

struct Indirect
{
    private readonly int value;
    private Indirect(int value)
    {
        this.value = value;
    }
    public static Indirect Create(int value)
    {
        return new Indirect(value);
    }
}
struct Direct
{
    private readonly int value;
    public Direct(int value)
    {
        this.value = value;
    }
}
class Program
{
    static void Main()
    {
        var x = Indirect.Create(42);
        var y = new Direct(42);
    }
}

有时,预期的用法是调用者使用new;有时,预期的用法是调用者从helper方法获得值。在Color的情况下:后者。在SolidBrush的情况下:前者。请注意,structclass类型都可能是这种情况——这不是区别因素。

Color的情况下,实际上有比您直接看到的多得多的字段;例如,knownColornamestate-分别到ARGB值。某些颜色是"已知的"(来自预定义的命名列表);一些颜色是特别的(来自ARGB数据)。获取颜色的方式决定了这些附加值。

类型System.Drawing.Color的构造函数是privateinternal,这意味着您不能从代码中调用它们。

您需要通过给定的静态方法和包含的属性(如Color.FromArgb()Color.White)实例化颜色。

至于注释,现在问题清楚了:这些方法和属性是静态的,这意味着你不在实例(new Color().White)上调用它们,而是在类型Color.White)上调用。

从其行为判断,方法

Color.FromArgb(int red, int green, int blue)

最有可能调用

new Color()

在其实现中,即它用新运算符声明了结构Color的一个实例。

两种实现是相等的,但是

  Brush B1 = new SolidBrush(Color.FromArgb(255, 0, 0));

较短。在的情况下,我宁愿使用更短的

  Brush B1 = new SolidBrush(Color.Red); // R = 255, G = 0, B = 0 is just "Red"  

注意,Brush就是IDisposable,这就是为什么你把它放在

  using (Brush B1 = new SolidBrush(Color.Red)) {
    ... // Working with brush 
  }