2016-04-09 13 views
0

Çok açıksa veya bu soru sitenin soru kurallarına uymuyorsa çok üzgünüm.Kendi sınıfında bir yöntemi aramada sorun var

Aşağıdaki örnekte, Main yöntemimi AverageThree yöntemimi nasıl çağırırdım? Aşağıdaki çalışmaz:

namespace Test 
{ 
    class Program 
    { 
     public double AverageThree(double one, double two, double three) 
     { 
      return (one * two * three)/3; 
     } 
     static void Main(string[] args) 
     { 
      Console.WriteLine(AverageThree(3.7, 56, 998.321)); 
     } 
    } 
} 

cevap

3

senin sınıfında sen fonksiyonların iki tür Program:

  • statik işlevleri: Main()
  • örneği fonksiyonları: AverageThree()

Ve Main() uygulamanızın giriş noktasıdır. Ve statik olmalı.

Statik bir işlevden yalnızca statik içeriğe erişebilirsiniz. Daha sonra, bir çözüm AverageThree()'u statik (ikinci çözüm) olarak dönüştürmektir. Diğer bir çözüm, Program örneğini oluşturmak ve AverageThree() işlevini çağırmaktır.

Sen sınıf Programı bir örneğini oluşturabilir

:

namespace Test 
{ 
    class Program 
    { 
     public double AverageThree(double one, double two, double three) 
     { 
      return (one * two * three)/3; 
     } 
     static void Main(string[] args) 
     { 
      Program p = new Program(); 
      Console.WriteLine(p.AverageThree(3.7, 56, 998.321)); 
     } 
    } 
} 

Yoksa statik yöntemini AverageThree dönüştürebilirsiniz: Bana neden hiç sakıncası yoksa

namespace Test 
{ 
    class Program 
    { 
     public static double AverageThree(double one, double two, double three) 
     { 
      return (one * two * three)/3; 
     } 
     static void Main(string[] args) 
     { 
      Console.WriteLine(AverageThree(3.7, 56, 998.321)); 
     } 
    } 
} 
+1

, Açıklayabileceğini Genel sınıf, bir örnek oluşturmadan sınıfında kullanılamaz mı? Derleyici neden aynı sınıfta olduğunu fark etmedi? veya görünürlük, bir yöntemin tüm program boyunca kullanılma şeklini değiştiriyor mu? – Jeremy

+2

Statik olmayan yöntemler, onları çağırmak için sınıfın bir örneğini gerektirir. Statik yöntemler, kendi sınıflarında bile statik yöntemleri yalnızca arayabilirler. Bazı ayrıntıları [burada] (https://msdn.microsoft.com/en-us/library/s35hcfh7.aspx) başlangıç ​​noktası olarak bulabilirsiniz. – AGB