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},而不在局部变量中保留对它的引用。这样,你基本上就是用你自己的标签“包装”一堆颜色。这基本上是一个主题类。