صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

کلاس abstract

کلاسهای abstract  یکی از ابزارهای مهم  شی گرایی است .کلاسهایی که نمی توان از آنها متغیری ساخت . و بصورت کلی دارای ساختار زیر هستند .

Abstract class  classname

{

بدنه کلاس

}

اما کلاس abstract چگونه است ؟

 

1-یک کلاس abstract  شبیه یک کلاس معمولی است . متد ، فیلد و خصوصیت دارد با این تفاوت که نمی توانیم از آن نمونه سازی کنیم ، به عبارتی نمی توانیم متغیری از نوع کلاس abstract  تعریف کرد .

 

2-یک کلاس abstract   شبیه یک اینترفیس است ، اما با دیدی وسیعتر (مفصلا توضیح خواهم داد )

 

3 -یک کلاس abstract  می تواند دارای متدهای abstract باشد که شبیه اینترفیس فقط اعلام می شوند و باید در زیر کلاسها بازنویسی شوند و جزییات آنها نوشته شود .

abstract class Location

    {

public abstract Location(string name);

{        

 

اگر دقت کنیم ، کلاس  abstract    حالتی بین کلاس معمولی و یک Interface  است . که برای فهم کامل آن باید مقایسه ای با  Interface  انجام دهیم تا تفاوت این دو بیشتر برای ما مشخص شود .

 

1-یک کلاس معمولی فقط می تواند از یک کلاس abstract ارث بری کند . در حالی که همان کلاس معمولی می تواند از چندین  Interface  ارث بری کند ( وراثت چند گانه )

 

2-یک Interface  فقط می تواند اعلان متدها و خصوصیتها را داشته باشد اما یک کلاس abstract علاوه بر انها می تواند متدها و خصوصیتهایی با کدهای کامل داشته باشد .

مثال :

 

abstract class Location

    {

        public Location(string name)

        {

            this.name = name;

        }

 

        public Location[] Exits;

 

        private string name;

        public string Name

        {

            get { return name; }

        }

}

3-عناصر یعنی متدها و خصوصیتها و .. در کلاس  abstract می توانند همانند یک کلاس معمولی دارای سطح دسترسی باشند . بر خلاف Interface

 

4-وقتی شما متدی را به کلاس abstract اضافه می کنید در صورتی که متد شما از نوع abstract نباشد ، اتوماتیک به تمام زیر کلاسها اعمال می شود ، اما در Interface  اگر متدی اضافه کنید باید در تمام زیر کلاسها آن را اعمال کنید و جزییات آن را مشخص کنید .

 

5-کلاسهای abstract مانند یک کلاس معمولی می توانند فیلد و عناصر داشته باشند در حالی که Interface  فاقد این خصوصیت است .

 

 

خواندن نام سرور sql از ریجستری

حتما شما هم نیاز دارید به ایجاد برنامه ای تحت ویندوز که با بانک اطلاعاتی sql_server کار می کند ، شاید در رشته اتصال نام سرور را local تعریف کنید ولی برخی مواقع جواب نمی دهد برای فهمیدن نام سرور بانک اطلاعاتی در هر رایانه می تواند از ریجستری اطلاعات را خواند سورس زیر با سی شارپ اینکار را براحتی انجام می دهد


ابتدا فضای نام 

using Microsoft.Win32

را به پروژه خود اضافه کنید سپس فرمی ایجاد کنید با یک کنترل لیبل ساده ، حالا در رویداد load مربوط به فرم سورس زیر را بنویسید :


private void Form1_Load(object sender, EventArgs e)

{

RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server");

 if (instances.Length > 0)

{
                foreach (String element in instances)
                {
               if (element == "MSSQLSERVER")
                this.label1.Text=System.Environment.MachineName;
            else
        this.label1.Text=System.Environment.MachineName + @"\" + element;
                }
            }
        }


اکنون برنامه را اجرا کنید تا نتیجه را ببینید  


       

Interface چیست ؟

یکی از مفاهیم شی گرایی ، مبحث Interface  ها است . مفهمومی که با وجود ساده بودن ، اما کاربردهای فراوانی دارد . در این مختصر می خواهم مفهموم و دلایل کاربردهای Interface  ها را بیان کنم .

 

Interface  چیست ؟

Interface را نمی توان کلاس نامید . هر چند در سلسله مباحث کلاسها مورد بررسی قرار می گیرد . اما می توان آن را قانونی  در نظر گرفت که بر روی کلاسها ، اعمال میشود . در واقع Interface قراردادی است . که به موجب این قرار داد ، برخی زیر کلاسهای برنامه ما موظفند از بندهای این قرارداد استفاده کنند . با این تفاوت که ما در Interface فقط کلیات قرار داد را ذکر می کنیم و جزییات را به عهده زیر کلاسها می گذاریم.

 

مهمترین نکته ها در مورد Interface :

 

1-وقتی ما از Interface استفاده می کنیم  زیر کلاسی که از Interface ارث بری می کند ، باید و باید و باید ، تمام متدها و خصوصیات Interface را اعمال کند (override) در غیر اینصورت با پیغام خطا مواجه می شویم.

 

2-یک کلاس فقط می تواند از یک کلاس دیگر ارث بری کند ، اما یک کلا س می تواند از چندین Interface ارث بری کند ( در مورد مفهموم ورراثت چند گانه خواهم نوشت )

 

3-Interface محدوده ای از متدهایی را تعریف می کند که چنانچه کلاسی از آن ارث بری  کند باید تمام آنها را اعمال کند

 

4-تعریف Interface  شبیه تعریف کلاس است با این تفاوت که در Interface بدنه متدها و خصوصیتها نوشته نمی شود و فقط نوع پارامترها ی ارجاعی و بازگشتی مشخص می شود.

 

5-Interface  نمی تواند داده ها را ذخیره کند ، شما نمی توانید برای Interface  فیلد تعریف کنید . شما فقط می توانید یک تعریفی کلی از خصوصیت و متدها را اعلام کنید .

 

6-ما نمی توانیم متغیری از نوع  Interface  تعریف کنیم .

 

7- Interface می تواند از Interface  دیگری ارث بری کند . در این حالت کلاسی که از Interface فرزند ارث بری می کند ، باید تمام خصوصیات و متدهای Interface والد و فرزند را اعمال کند .

 

در زیر یک مثال از Interface می آوریم ، Interface با کلمه Interface تعریف می شود . خوب Interfaceی به صورت زیر تعریف می کنیم :

 

interface Icol

    {

    {;   string Funny { get  

void Honk();      

 

}

همانطور که در بالا تعریف کردیم ما Interfaceی به نام مثلا به نام Icol  تعریف می کنیم ، این Interface دارای متد honk  و دارای خصوصیت  funny  است . همانطور که می بینید ، فقط اعلان شده اند و هم متد و هم خصوصیت فاقد بدنه هستند .

حال باید کلاسی تعریف کنیم که Interface بالا را ارث بری کند و متدها و خصوصیت در آن اعمال شوند .

 

class TallGuy : Icol

    {

        public string Name;

        public int Height;

 

        public void TalkAboutYourself()

        {

            MessageBox.Show("My name is " + Name + " and I’m "

               + Height + " inches tall.");

        }

 

        public string Funny

        {

            get { return "big shoes"; }

        }

 

        public void Honk()

        {

            MessageBox.Show("Honk honk!");

        }

    }

 

خوب همانطور که می بینید کلاس ما علاوه بر ارث بری از Interface ، متدها و خصوصیتهای آن را با بدنه دوباره تعریف می کند .


در مقاله بعد در مورد کلاس  abstract class  خواهم نوشت .