Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有一个称为参数的静态变量_C#_Object_Colors_Static - Fatal编程技术网

C# 有一个称为参数的静态变量

C# 有一个称为参数的静态变量,c#,object,colors,static,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) {

我想实现一个结构,其中包含从
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 ??
当我用鼠标看的时候,我看到了

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


谢谢大家

您的testfunc应该如下所示:

internal void testfunc(Label lbl, ColorValue newcolor)
{
    lbl.BackColor = newcolor.NormalFont;
}
你如何传递你的结构?应该是这样的:

ColorValue colorstruct;
testfunc(somelabel, colorstruct);

也可以考虑更改<代码> NormalFont < /COD>的名称,因为它不是真正的字体,而是一个颜色。

< P>我将使用一个静态类,并且具有一些只读属性。仅在使用颜色时实例化它们,这样类将以所有空值(未分配内存)开始,然后在读取/获取每个属性时,它将基于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;
}*/

您的第一个示例是可行的,但是您说您想让您的方法将您的
struct ColorValue
作为参数,当然您可以这样做,但是您不能用您的结构填充
标签的
BackColor
,因为它是不同的类型,正如您所猜测的,您必须像在上一个示例中一样传递结构的实例

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

关于内存,如果您创建了1000个
Form1
实例,您将创建1000个
ColorValue
实例,但如果您的
struct ColorValue
将保持原样,则它仅为1个
字节
。一般来说,记忆不是问题

编辑: 以下两者之间的区别是什么

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

第一个是属性,第二个是字段。属性有set和get方法,所以区别在于试图获取属性的值将调用get方法,该方法将返回您想要的内容,而字段是对您想要的内容的直接引用。通常建议仅公开属性并隐藏字段,原因是您无法(或无法轻松)调试/监视对字段的访问,而调试对属性的访问则很容易。

它应该可以工作,你得到了什么例外?一个关于struct vs class的词:所以读这篇文章意味着内存最好有一个引用类型(class)而不是一个变量类型(struct)。。。。谢谢。但是如果我的类颜色包含1000个定义,那么为每个定义添加一个get会更好吗??谢谢。记住,在实例化每种颜色之前,ColorValues类不会使用任何内存。更好的方法是只放置get{return Color.AliceBlue},而不在局部变量中保留对它的引用。这样,你基本上就是用你自己的标签“包装”一堆颜色。这基本上是一个主题类。