C# 在C中使用类的实例#

C# 在C中使用类的实例#,c#,class,colors,system.windows.media,C#,Class,Colors,System.windows.media,我对一个类实例有一些问题,不理解这个问题。我在不同的课程中使用彩色文本,因此我的想法是只定义一次颜色,这样更改颜色就容易多了 对于颜色的定义,我指定了一个名为MyColors的类。我使用System.Windows.Media并使用颜色类定义RGB颜色。我的想法是将每种颜色指定为privat,并添加一个属性,该属性生成对该颜色的读取权限,但VisualStudio向我发送了一个错误 namespace MyProject { class MyColor { private Color m

我对一个类实例有一些问题,不理解这个问题。我在不同的课程中使用彩色文本,因此我的想法是只定义一次颜色,这样更改颜色就容易多了

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

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
}
}
名称空间MyProject
{
霉色类
{
私有颜色myGreen=新颜色();
myGreen=Color.FromRgb(0,255,0);
#区域属性
/// 
///得到我的绿色
/// 
///我的绿色
静态公共色MyGreen
{
得到
{
返回myGreen;
}
}
#端区
}
}
第六行“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
}
}
名称空间MyProject
{
霉色类
{
#区域属性
/// 
///得到我的绿色
/// 
///我的绿色
静态公共色MyGreen
{
得到
{
颜色myGreen=新颜色();
myGreen=Color.FromRgb(0,255,0);
返回myGreen;
}
}
#端区
}
}

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

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

  • 如果希望
    MyGreen
    属性为
    static
    ,则其getter(
    get{…}
    )返回的底层实例也必须声明为
    static
  • 不能使用多行代码在类范围中创建实例。这种代码只能在内部范围内执行,如构造函数、属性或方法。由于无需实例化它两次(首先使用
    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; }
    
            }
    
            // ...
        }
    }
    

    你不能只在类级别上放置任意代码,它需要在一个方法中
    返回myGreen。另一个错误是,
    System.Drawing.Color.Green
    。Visual Studio发送错误:名称“myGreen”在当前上下文中不可用。(翻译自德语)抱歉,get中的返回myGreen实际上是以一个小字母开始的,myGreen是帖子中的一个错误。@TommasoBelluzzo请不要在这里要求接受/投票,这被认为是非常恶劣的行为。我认为,为了教育新用户,你这样做应该是可以的。通常,新用户在问题解决后关闭SO选项卡,留下他们的问题“未回答”,忘记奖励为帮助他们所做的任何努力。最重要的是,我并没有强迫他接受我的回答,我只是告诉他,如果他要找的话,就要接受。