2010-05-31 83 views
2

我尝试生成一些代码。我面对面代表。一切都好(看下面)但是出现一个警告:你为什么要重视嘲讽价值?但下面的第二个代码是可以的。为什么先分配空值或其他默认值?

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 

} 

}

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=null; } }
+0

什么版本的Visual Studio?这是给你一个警告的确切代码吗? – 2010-05-31 15:28:11

回答

0

这时并不需要,不应该产生警告。
Section 10.4.4 of the C# (3.0) spec说:

一个字段的初始值,不管它是静态场或者实例字段,是字段的类型的默认值(第5.2节)。在默认初始化发生之前,无法观察字段的值,因此字段永远不会“未初始化”。 以下类别的变量自动初始化为默认值:

Section 5.2 of the C# (3.0) spec说:

一个变量的默认值取决于变量的类型和被确定为如下:

  • 对于值类型的变量,默认值与值类型的默认构造函数计算的值相同(参见第4.1.1节)。
  • 对于引用类型的变量,默认值为null。

所以public Hesap Calculator;就是它的默认值(NULL)自动初始化。

1

您的班级HesapMak是内部的。编译器因此可以立即查看字段Calculator的所有用法。

如果您的代码中无处分配给Calculator,编译器会给您一个警告。这是因为该领域是不必要的。

只要您开始在代码的某个位置使用该字段,警告就会消失。所以现在就忽略它并写上。