2010-05-31 6 views
2

일부 코드를 생성하려고합니다. 나는 대의원들과 직접 대면한다. 모든 것은 괜찮습니다. (아래를보십시오) 그러나 경고를 나타냅니다 : 왜 당신은 값을 치는 것을 보았습니까? 아래의 두 번째 코드는 괜찮습니다.null 값이나 다른 기본값을 먼저 할당하는 이유는 무엇입니까?

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의 어떤 버전입니까? 그리고 이것이 당신에게 경고를주는 정확한 코드입니까? –

답변

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;

는 기본 값 (널)에 자동으로 초기화됩니다.

1

클래스 HesapMak은 내부 용입니다. 따라서 컴파일러는 즉시 필드 Calculator의 모든 사용을 볼 수 있습니다.

코드에서 아무 것도 Calculator으로 지정하지 않으면 컴파일러에서 경고를 표시합니다. 필드가 불필요하기 때문입니다.

코드는 어딘가에 필드를 사용하자 마자 경고 메시지가 사라집니다. 이제는 무시하고 글쓰기 만하면됩니다.

관련 문제