C # статикалық класс неге пайдаланылады?

Possible Duplicate:
When to Use Static Classes in C#

Мен сабақтарымды статикалық деп белгіледім, бірақ статикалық қолданыста не пайдаланылмайтынына сенімді емеспін, не оны пайдаланудың айырмашылығы не болмаса.

кім түсіндіре алады?

18
@Yahia: статикалық сыныптары бар синглондық үлгіні? Мен осылай ойлаймын.
қосылды автор BoltClock, көзі
статикалық сыныптар/әдістер Singleton үлгісін және Factory үлгісін іске асыру үшін пайдалы.
қосылды автор Yahia, көзі
@BoltClock ЕГЕР мұқият оқып шықсаңыз, мен «статикалық сыныптар/әдістер» деп жаздым және Singleton үлгісін қолданған кезде статикалық әдістер қолданылғанына сенімдімін ...
қосылды автор Yahia, көзі

3 жауаптар

Класс статикасын жасау адамдарға оның данасын жасауға тырысады. Егер сіздің барлық классыңыз статистикалық мүшелер болса, бұл сыныптың өзін статикалық етудің жақсы тәжірибесі.

29
қосылды
Ол адамдарға оны жасауға тырысады
қосылды автор Dylan Smith, көзі
Егер бізде барлық мүшелер статикалық болып табылса, сыныпты статикалық етіп жасау жақсы тәжірибе? Класс өзін статикалық етудің қандай артықшылығы болады?
қосылды автор Mayur Dhingra, көзі
Бірақ бұл мақсатта сіз жеке конструктор жариялай аласыз және Singleton сыныбын жасай аласыз. Менің білуімше, статикалық класс әрдайым еске түседі, бірақ әдеттегі синглтондық сыныптар болмайды.
қосылды автор Mayur Dhingra, көзі

Егер сынып статикалық деп жарияласа, айнымалылар мен әдістер міндетті түрде статикалық деп жариялануы керек.

Класс тек статистикалық мүшелері бар екенін көрсететін статикалық деп жариялауға болады. Жаңа кілт сөзді пайдаланып, статикалық сыныптың даналарын жасау мүмкін емес. Статикалық сыныптар сыныпты қамтитын бағдарлама немесе аттар кеңістігі жүктелген кезде .NET Framework ортақ тіл орындалу уақыты (CLR) автоматты түрде жүктеледі.

Белгілі бір нысанмен байланыстырылмайтын әдістерді қамту үшін статикалық сыныпты пайдаланыңыз. Мысалы, мысалы деректерде әрекет етпейтін және кодадағы белгілі бір нысанмен байланыстырылмайтын әдістер жинағын жасаудың жалпы талаптары. Бұл әдістерді ұстап тұру үшін статикалық классты пайдалануға болады.

->The main features of a static class are:

  • Олар тек статикалық мүшелерден тұрады.
  • Жасалуы мүмкін емес.
  • Олар мөрленеді.
  • Нысан конструкторлары немесе қарапайым конструкторлар болмайды, себебі олар нысандармен байланысқан және объект жасалып жатқанда деректерге байланысты екенін білеміз.

Мысал

static class CollegeRegistration
{
  //All static member variables
   static int nCollegeId; //College Id will be same for all the students studying
   static string sCollegeName; //Name will be same
   static string sColegeAddress; //Address of the college will also same

    //Member functions
   public static int GetCollegeId()
   {
     nCollegeId = 100;
     return (nCollegeID);
   }
    //similarly implementation of others also.
} //class end


public class student
{
    int nRollNo;
    string sName;

    public GetRollNo()
    {
       nRollNo += 1;
       return (nRollNo);
    }
    //similarly ....
    public static void Main()
   {
     //Not required.
     //CollegeRegistration objCollReg= new CollegeRegistration();

     //.
     int cid= CollegeRegistration.GetCollegeId();
    string sname= CollegeRegistration.GetCollegeName();


   } //Main end
}
13
қосылды
мәжбүрлеп мәжбүрлеп мәжбүрлеп мәжбүрлеп мәжбүрлеп мәжбүрлеп мәжбүрлеп мәжбүрлеу
қосылды автор l--'''''&#, көзі

Тұрақты сыныптар белгілі бір жағдайларда пайдалы болуы мүмкін, бірақ көптеген тіл ерекшеліктері сияқты оларды теріс пайдалану және/немесе артық пайдалану мүмкіндігі бар.

Дилан Смит айтып өткендей, статикалық сыныпты пайдаланудың ең ашық мысалы - тек статикалық әдістермен ғана сынып бар. Әзірлеушілерге мұндай сыныпты құруға рұқсат берудің ешқандай мәні жоқ.

Ескерту, статикалық әдістердің артықшылығы сіздің дизайн стратегияңыздағы кемшілікті көрсете алады. Мен статикалық функцияны жасап жатқанда, өзіңнен сұрауға болатын жақсы нәрсе - а) дана әдісі немесе б) интерфейске кеңейту әдісі ретінде жақсы болар еді. Мұнда идея объектілік мінез-құлықтың әдетте объектінің күйімен байланысты, яғни мінез-құлық нысанға тиесілі болуы керек. Статикалық функцияны пайдаланып, мінез-құлықтың кез-келген нақты нысанға тиесілі болмайтындығын білдіреді.

Полиморфтық және интерфейсті басқаратын дизайн статикалық функцияларды шамадан тыс ұстап тұруына кедергі келтіреді - олар алынған сыныптарда анықталмайды және олар интерфейске қосыла алмайды. Әдетте, сіздің «көмекші» функцияларын интерфейске кеңейтім әдісімен байланыстырған жақсы, өйткені интерфейстің барлық даналары осы ортақ «көмекші» функциясына қол жеткізе алады.

Статикалық функциялары пайдалы деп санайтын жағдайлардың бірі, менің ойымша, объектіні жасау үшін логиканы іске асыру үшін. Crere() немесе. New() әдісін жасауда, мысалы, жасалатын нысанды проксиге қою керек болғанда,

public class Foo
{
    public static Foo New(string fooString)
    {
        ProxyGenerator generator = new ProxyGenerator();

        return (Foo)generator.CreateClassProxy
             (typeof(Foo), new object[] { fooString }, new Interceptor()); 
    }

Бұл, оның әдістеріне тағайындалған белгілі бір атрибуттарға негізделіп, функцияны нысанға кіргізу/енгізуді қалайтын проксимальды негізде (Castle Dynamic Proxy) пайдаланылуы мүмкін. Жалпы идея мынада, сізге арнайы конструктор керек, себебі техникалық түрде сіз қосымша функционалдығы бар түпнұсқа данасының көшірмесін жасайсыз.

3
қосылды