将一个静态变量称为参数

时间:2017-02-01 15:21:19

标签: c# object colors static

我想实现一个包含从System.Drawing.Color发出的定义颜色的结构。这是我的最终代码。

namespace ColorSystem
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    internal void testfunc(Label lbl, System.Drawing.Color newcolor)
    {
        lbl.BackColor = newcolor;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var getvalue = ColorValues.NormalFont;
        testfunc(label1, ColorValues.NormalFont);
        testfunc(label2, ColorValues.NormalFont2);
    }

}
public static class ColorValues
{
    // Private variable to hold font once instantiated
    public static System.Drawing.Color NormalFont{ get{ return Color.AliceBlue;}}//Dynamic
    public static System.Drawing.Color NormalFont2 =         Color.AliceBlue;//static ??
}

我仍然没有得到的是这两行之间的区别:

 public static System.Drawing.Color NormalFont{ get{ return        Color.AliceBlue;}}//Dynamic
 public static System.Drawing.Color NormalFont2 =         Color.AliceBlue;//static ??

当我用鼠标看时,我看到了。

What interpreter show me

立方体和手之间有什么区别?手是(得到)所以它是动态的吗?而立方体是内存中的数据...... ??

非常感谢大家!

3 个答案:

答案 0 :(得分:1)

您的testfunc应如下所示:

internal void testfunc(Label lbl, ColorValue newcolor)
{
    lbl.BackColor = newcolor.NormalFont;
}

你是如何传递你的结构的?它应该是这样的:

ColorValue colorstruct;
testfunc(somelabel, colorstruct);

另外,请考虑更改NormalFont的名称,因为它不是真正的字体而是颜色。

答案 1 :(得分:1)

您的第一个示例有效,但之后您说您希望让您的方法将struct ColorValue作为参数,确定您可以执行此操作,但无法填写BackColor Label使用你的结构,因为它是不同类型的,你猜你必须像你在上一个例子中那样传递结构的实例。

因此,要么使用您的第一个示例,要么使用您的最后一个示例,但您必须创建结构的实例。

关于内存,如果您创建了1000个Form1个实例,那么您将生成1000个ColorValue个实例,但如果struct ColorValue保持不变,那么它只有1 {{1} }}。通常记忆不是问题。

编辑: 以下是什么区别?

byte

第一个是属性,第二个是字段。属性有set和get方法,所以区别在于试图获取属性值会调用get方法返回你想要的东西,而field直接引用你想要的东西。通常建议只公开属性和隐藏字段,理由是,您不能(或不能轻易)调试/监视对字段的访问,同时很容易调试对属性的访问。

答案 2 :(得分:0)

我会使用静态类,并具有一些只读属性。只有在使用它们时才会实例化颜色,所以你的类将从所有空值开始(没有分配内存),然后当你读取/获取每个属性时,它将基于System.Drawing.Color实例化

public static class ColorValues
{
    // Private variable to hold font once instantiated
    private static System.Drawing.Color _normalFont;
    public static System.Drawing.Color NormalFont 
    {
        get
        {
            // Only instantiate when needed
            if (_normalFont == null)
            {
                _normalFont = Color.AliceBlue;         
            }
            return _normalFont;
        }
    }
}

然后您可以在表单中使用:

   private void button1_Click(object sender, EventArgs e)
   {
       testfunc(label1, ColorValues.NormalFont);
   }

我试过这个

  public partial class Form1 : Form
  {
    public Form1()
    {
        InitializeComponent();
    }

    internal void testfunc(Label lbl, ColorValues newcolor)
    {
        lbl.BackColor = newcolor;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        testfunc(label1, ColorValues.NormalFont);
    }

}
public static class ColorValues
{
    // Private variable to hold font once instantiated
    public static System.Drawing.Color NormalFont{ get{ return Color.AliceBlue;}}
}
/*  public struct ColorValue
{
    public static System.Drawing.Color NormalFont = Color.AliceBlue;
}*/