我对一段C#代码有一些疑问。下面是OxyPlot的一个例子(知道这一点并不重要,但我认为无论如何我都会说它)用于绘制热图。
HeatMapSeries heatMapSeries = new HeatMapSeries();
heatMapSeries.X0 = 0.5;
heatMapSeries.X1 = 1.5;
heatMapSeries.Y0 = 0.5;
heatMapSeries.Y1 = 2.5;
heatMapSeries.Interpolate = false;
heatMapSeries.Data = new Double[2, 3];
heatMapSeries.Data[0, 0] = 0;
heatMapSeries.Data[0, 1] = 0.2;
heatMapSeries.Data[0, 2] = 0.4;
heatMapSeries.Data[1, 0] = 0.1;
heatMapSeries.Data[1, 1] = 0.3;
heatMapSeries.Data[1, 2] = 0.2;
您正在使用heatMapSeries
构造函数创建新的HeatMapSeries()
对象。接下来,操作heatMapSeries.X0
,heatMapSeries.X1
,heatMapSeries.Y0
,heatMapSeries.Y1
被分配了新值,我非常确定它包含OxyPlot HeatMapSeries()
中的默认实例变量构造函数。现在,我的问题是,.X0
,.X1
,Y0
等等到底在做什么?
在Java中,bigBrownYak.calculateWeight()
将在calculateWeight()
对象上使用bigBrownYak
方法。那些像.X0
这样的方法呢?
接下来,heatMapSeries.Data = new Double[2,3]
正在创建一个新的Double
多维数组,我理解,但.Data
对heatMapSeries
做了什么? Data
是heatMapSeries
构造函数对象中的实例变量吗?
对于相当简陋的问题感到抱歉。
答案 0 :(得分:4)
他们是properties。
它们可以与吸气剂和放大器进行比较(但不完全)。 Java中的setters。除了它们的工作方式与Java中的公共字段相同。
实施可能如下所示:
public string X0 { get; set; } // Auto implemented property
private string field;
public string X0 {
get { return field * 2; }
set { field = value; }
} // Custom property with backing field
用法:
// Getting value
var x = someObject.X0;
// Setting value
someObject.XO = "lala";
答案 1 :(得分:1)
如Jeroen's Answer中所述,这些是C#中的属性,java完全缺乏并试图使用getXXX()
和setXXX()
约定来模仿,这很糟糕。
我还想补充一点,这段代码特别是“非C#” - 如:
HeatMapSeries heatMapSeries = new HeatMapSeries();
heatMapSeries.X0 = 0.5;
heatMapSeries.X1 = 1.5;
heatMapSeries.Y0 = 0.5;
heatMapSeries.Y1 = 2.5;
heatMapSeries.Interpolate = false;
在C#中,您使用Object Initializer Syntax来简化这些构造:
var heatMapSeries = new HeatMapSeries
{
X0 = 0.5,
X1 = 1.5,
Y0 = 0.5,
Y1 = 2.5,
Interpolate = false
};
另请注意var keyword的使用,以避免在同一行代码中两次输入HeatMapSeries
类型名称。
结论:是的,C#比java好得多。