-1

我对类实例有一些麻烦,不明白这个问题。我正在使用不同类中的彩色文本,因此我的想法是只定义一次这种颜色,这样更改它们会容易得多。

对于颜色的定义,我指定了一个名为 MyColors 的类。我使用 System.Windows.Media 并使用 Color 类定义了 RGB 颜色。我的想法是将每种颜色指定为 privat 并添加一个生成对该颜色的读取访问权限的属性,但 Visual Studio 向我发送了一个错误。

namespace MyProject
{
class MyColor
{
    private Color myGreen = new Color();
    myGreen = Color.FromRgb(0, 255, 0);

    #region Properties
    /// <summary>
    /// Gets my green
    /// </summary>
    /// <value>my green</value>
    static public Color MyGreen
    {
        get
        {
            return myGreen;
        }

    }
    #endregion
}
}

第六行“myGreen...”产生错误。如果我将代码更改为以下代码,它可以工作。

namespace MyProject
{
class MyColor
{
    #region Properties
    /// <summary>
    /// Gets my green
    /// </summary>
    /// <value>my green</value>
    static public Color MyGreen
    {
        get
        {
            Color myGreen = new Color();
            myGreen = Color.FromRgb(0, 255, 0);
            return myGreen;
        }

    }
    #endregion
}
}

谁能解释我做错了什么。看来我对类的理解有误。

4

1 回答 1

0

我更喜欢您在第一个代码片段中使用的方法,因为它不需要在Color每次MyGreen访问该属性时都实例化一个新的。但它包含一些错误:

  1. 如果您希望MyGreen属性为static,则其 getter ( get { ... }) 返回的基础实例也必须声明为static
  2. 您不能使用多行代码在类范围内创建实例。这种代码只能在内部范围内执行,如构造函数、属性或方法。由于没有必要实例化它两次(首先使用Color()构造函数,然后使用Color.FromRgb它基本上返回Color具有指定值的新实例RGB),所以一切都可以转换为单行而不改变想要的行为。

下面是您的课程的外观:

namespace MyProject
{
    public class MyColor
    {
        private static Color s_MyGreen = Color.FromRgb(0, 255, 0);

        public static Color MyGreen
        {
            get { return s_MyGreen; }

        }

        // ...
    }
}
于 2018-01-21T14:06:32.087 回答