我想实现一个包含从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 ??
当我用鼠标看时,我看到了。
立方体和手之间有什么区别?手是(得到)所以它是动态的吗?而立方体是内存中的数据...... ??
非常感谢大家!
答案 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;
}*/