我尝试生成一些代码。我面对面代表。一切都很好。(看下面)但是出现了一个警告:你为什么值得贬值?但是下面的第二个代码是可以的。
namespace Delegates { class Program { static void Main(string[] args) {
HesapMak hesapla = new HesapMak(); hesapla.Calculator = new HesapMak.Hesap(hesapla.Sum); double sonuc = hesapla.Calculator(34, 2); Console.WriteLine("Toplama Sonucu:{0}",sonuc.ToString()); Console.ReadKey(); } } class HesapMak { public double Sum(double s1, double s2) { return s1 + s2; } public double Cikarma(double s1, double s2) { return s1 - s2; } public double Multiply(double s1, double s2) { return s1 * s2; } public double Divide(double s1, double s2) { return s1 / s2; } public delegate double Hesap(double s1, double s2); public Hesap Calculator; ----< they want me assingn value }
HesapMak hesapla = new HesapMak(); hesapla.Calculator = new HesapMak.Hesap(hesapla.Sum); double sonuc = hesapla.Calculator(34, 2); Console.WriteLine("Toplama Sonucu:{0}",sonuc.ToString()); Console.ReadKey(); } } class HesapMak { public double Sum(double s1, double s2) { return s1 + s2; } public double Cikarma(double s1, double s2) { return s1 - s2; } public double Multiply(double s1, double s2) { return s1 * s2; } public double Divide(double s1, double s2) { return s1 / s2; } public delegate double Hesap(double s1, double s2); public Hesap Calculator; ----< they want me assingn value }
}
答案 0 :(得分:1)
您的班级HesapMak
是内部的。因此,编译器可以立即查看字段Calculator
的每次使用。
如果你的代码中没有分配给Calculator
,编译器会给你一个警告。这是因为这个领域是不必要的。
一旦开始在代码中的某个位置使用该字段,警告就会消失。所以现在就忽略它并写下来。
答案 1 :(得分:0)
这不是必要的,不应该发出警告 Section 10.4.4 of the C# (3.0) spec说:
字段的初始值,无论是静态字段还是实例字段,都是字段类型的默认值(第5.2节)。在发生此默认初始化之前,无法观察字段的值,因此字段永远不会“未初始化”。 以下类别的变量会自动初始化为其默认值:
Section 5.2 of the C# (3.0) spec说:
变量的默认值取决于变量的类型,并确定如下:
- 对于value-type的变量,默认值与value-type的默认构造函数计算的值相同(第4.1.1节)。
- 对于reference-type的变量,默认值为null。
因此public Hesap Calculator;
会自动初始化为默认值(null)。