2016-04-08 19 views
0

Statik sınıflar ve statik yöntemleri ve bunların statik olmayan yöntemlerle ve onların sınıfsal bir örneğini (nesnesi) gerçekleştirmemesi gereken Ana yöntem haricinde hala elde edemedikleri kullanımları ve bunların farklılıklarını anlamak için etrafta okuma ve uğraşmak.Confusion;

Neden ben kullanmaya çalışırsanız:

Sonra
using static System.ApplicationId; 

public class Program 
{ 
    static void Main() 
    { 
     Copy(SOMETHING)// Copy method doesn't exist 
    } 
} 

Copy();

IDE gibi applicationID bir yöntem kullanmayı deneyin? yöntemi bulamıyor musunuz? ile aynı yapmak

:

using static System.Console; 

public class Program 
{ 
    static void Main() 
    { 
     Writeline("Hello"); // OK 
    } 
} 

Sonra O bulabilirsiniz WriteLine();

gibi Konsolbir yöntem bulmaya ve onu kullanabilirsiniz.

Bu neden oluyor?

Anladığım kadarıyla bunlar hem statik üyeler? Bu 2 sınıfın örneklerini yapamamanın nedeni bu değil mi? Yine de, ikinci örnekte yöntemleri kullanabilirim, ancak bana izin vermediği için ilk hatayı kullanamamışımdır (error: copy() o anki bağlamda mevcut değildir ...).

cevap

3

Kısa cevap (örnek) sınıfı, önce bir örneğini yapmak zorunda olmayan bir statik yöntemlerini kullanmak için System.ApplicationId
gibi statik olmayan ad alanları için bir using açıklamada static anahtar kelime kullanmak olmaz ki new kullanarak.

tl; dr parçası, sınıftaki sonra

using System; 

ve ekleyebilir sen ApplicationId başvurmak istediğiniz her zaman gibi önek System. yazmak zorunda kalmamak için
izler, sen birYöntem alabilirsiniz() metodu ile: Şimdi

new ApplicationId().someMethod(); 


statik bahsedelim:
C# sürüm 6 önce, sadece ilk olan statik olmayan ebeveyn (System) eklersiniz böylece

System.Console.WriteLine() 

gibi statik bir yöntemle erişmek için, statik bir sınıfın bir using deyimi kullanamadı

using System 

ve eklemek, using static sözdizimi ile ad

Console.WriteLine 

kullanılarak statik yönteme başvurmak şöyle using ekstresinde kez Sınıf başına ad alanının 'Console.' kısmı:

`using static System.Console;` 

ve sonra WriteLine() yerine Console.WriteLine kullanabilirsiniz. Bu işlevsellik için WriteLine() yönteminin en yaygın kullanım durumu olması gerektiğini tahmin etmeliyim.

https://msdn.microsoft.com/en-us/library/system.console%28v=vs.110%29.aspx'a bakarsanız, System.Console'ın statik bir sınıf olduğunu, yani using static'un burada uygun olduğunu gösterir.

Ancak, System.ApplicationId statik olmayan (bkz. https://msdn.microsoft.com/en-us/library/system.applicationid%28v=vs.110%29.aspx), böylece using static kullanamazsınız.

+0

Teşekkür ederim :) – Johnson

0

ApplocationId statik bir sınıf değil, bu nedenle bir örneğini oluşturmanız gerekir.

2

cevap ApplicationId yılında yöntemler static olarak işaretlenmemiş vardır basittir.

Random aRandomObject = new Random(); 
aRandomObject.Next(); 
************* **** 
    ^ ^
name of an method 
instance of name 
Random 

Burada görebileceğiniz gibi, bu bir örneğini gerekir:

Statik yöntem:

Console.WriteLine(); 
******* ********* 
^  ^
class method 
name  name 

Örnek yöntemleri

statik ve örnek yöntemleri arasındaki farkı görelim Statik olmayan yöntemleri kullanmak için sınıf. Fakat statik yöntemler için, bir örneğe ihtiyacınız yoktur.

using static yönergesi, statik yöntemini çağırdığınızda sınıf adını atlamanıza olanak tanır.

"Neden bunun gibi örnek yöntemlerini çağırmamıza izin vermiyor?" sen sordun. Yukarıda söylediğim gibi, örnek yöntemlerini çağırmak için bir örneğe ihtiyacınız var. Yöntemi çağırmak için yalnızca yöntem adını yazarsanız, derleyici hangi örneği çağırmak istediğinizi nasıl bilebilir?

İlgili konular