2010-05-31 80 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,編譯器會給您一個警告。這是因爲該領域是不必要的。

只要您開始在代碼的某個位置使用該字段,警告就會消失。所以現在就忽略它並寫上。