这些方法是否用于C#中的以下对象?

时间:2013-12-06 19:27:24

标签: c#

我对一段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.X0heatMapSeries.X1heatMapSeries.Y0heatMapSeries.Y1被分配了新值,我非常确定它包含OxyPlot HeatMapSeries()中的默认实例变量构造函数。现在,我的问题是,.X0.X1Y0等等到底在做什么?

在Java中,bigBrownYak.calculateWeight()将在calculateWeight()对象上使用bigBrownYak方法。那些像.X0这样的方法呢?

接下来,heatMapSeries.Data = new Double[2,3]正在创建一个新的Double多维数组,我理解,但.DataheatMapSeries做了什么? DataheatMapSeries构造函数对象中的实例变量吗?

对于相当简陋的问题感到抱歉。

2 个答案:

答案 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好得多。