2010-05-31 9 views
2

J'essaie de générer des codes. Je suis face aux délégués. Tout va bien. (Regardez ci-dessous) Mais apparaissant un avertissement: vous expliquez pourquoi? mais le deuxième code ci-dessous est ok.pourquoi attribuer d'abord une valeur nulle ou une autre valeur par défaut?

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

Quelle version de Visual Studio? Et est-ce le code exact qui vous donne un avertissement? –

Répondre

0

C'est et non nécessaire ne devrait pas donner lieu à un avertissement.
Section 10.4.4 of the C# (3.0) spec dit:

La valeur initiale d'un champ, que ce soit un champ statique ou un champ d'instance, est la valeur par défaut (section 5.2) du type du champ. Il n'est pas possible d'observer la valeur d'un champ avant que cette initialisation par défaut n'ait eu lieu, et un champ n'est donc jamais "non initialisé". Les catégories de variables suivantes sont automatiquement initialisées à leurs valeurs par défaut:

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

La valeur par défaut d'une variable dépend du type de la variable et est déterminée comme suit:

  • Pour une variable d'un type valeur, la valeur par défaut est la même que la valeur calculée par le constructeur par défaut du type valeur (Section 4.1.1).
  • Pour une variable d'un type de référence, la valeur par défaut est null.

Alors public Hesap Calculator; est initialisé automatiquement à sa valeur par défaut (null).

1

Votre classe HesapMak est interne. Le compilateur peut donc voir immédiatement chaque utilisation du champ Calculator.

Si nulle part dans votre code vous affectez à Calculator, le compilateur vous avertira. C'est parce que le champ est alors inutile.

L'avertissement disparaîtra dès que vous commencerez à utiliser le champ quelque part dans votre code. Alors ignorez-le pour l'instant et écrivez dessus.

Questions connexes