مثال حل شده سی شارپ

  • پاسخ به نظرات

    پاسخ سوال: در حالت کلی پراپرتی(property) در کنار فیلدها تعریف میشوند و دلیل اصلی اون مسئله امنیت برنامه هست.برای این که مفهوم را بهتر درک کنید یه مثال میزنم.این مثال ابتدا بدون استفاده از پراپرتی وسپس با استفاده از پراپرتی مطرح شده. مثال بدون پراپرتی: فرض کنید یه console application ساختید و در کلاس program یه متد ساختید بنام GetCircleArea.این متد کارش محاسبه مساحت دایره است.همونطور که میدونید مساحت دایره برابر است با 3.14 ضرب در شعاع به توان دو.اما اگه یادتون باشه استادان ریاضی میگفتن که میتونید 3.14 را 3.0 نیز بگیرید، تقریبا جواب بدست می آید.این متد ما به عنوان ورودی شعاع را میگیرد.و ما نیز می خواهیم این امکان را به کاربر بدهیم که خود(pi=3.14) را تعیین کند ، یعنی قادر باشد به Pi حتی 3 نیز بدهد.خوب برای این کار باید یه فیلدی از نوع float در نظر بگیریم برای پذیرفتن pi.این فیلد را این چنین تعریف میکنیم: public float pi; دلیل اینکه Pi را public تعریف کردیم این است که کاربر میتواند به آن مقدار دهد.این کار برای سادگی از متد main انجام میدهیم یعنی کاربر در main برنامه فرضا می نویسد: pi = 3.14 f ; GetCircleArea ( 2 ); دوست عزیز دقت کن ، در این جا چون pi را public تعریف کردیم کاربر می تواند حتی مقدار 2.2 هم به ان بدهد.این طور نیست؟و اگر این کار را بکند دیگر متد GetCircleArea مساحت را اشتباه حساب خواهد کرد.در مثال بالا متد GetCircleArea شعاع 2 را گرفته و چون قبل از اون Pi را کاربر 3.14 تعریف کرده مساحت درست محاسبه میشه اما همونطور که گفتم اگه بجای pi مقدار 2.2 یا هرچی غیر از بازه (3.14 ،3) قرار دهد مساحت اشتباه محاسبه میشود. در واقع یکی از رکن های برنامه نویسی شی گرا میگه تا جایی که میتونی روند انجام کار برنامتو از دید کاربری که باهاش قراره کار کنه مخفی کن.(encapsulation) بر اساس این رکن، شما با public کردن فیلد خود، ان را رعایت نکردید زیرا عدد pi یکی از اصلی ترین جزء های روند برنامتون بوده و باید اونو مخفی می کردید تا مشکلاتی از قبیل بالا پیش نیاد.حالا راه حل چیه؟ مثال با استفاده از property: راه حل استفاده از property هست.شما میتونید فیلد pi را private تعریف کنید و در عوض یه property براش بنویسید که فقط بازه 3 تا 3.14 را بپذیره به شرح زیر: private float pi = 3.14F; public float PI { get { return pi;} set {          if( value >=3 && value<=3.14 )                    pi = value ; } } الان دیگه شما نگران این نخواهید بود که کاربر مثلا 2.2 را به پراپرتی PI بدهد زیرا این مقدار در فیلد pi قرار نخواهد گرفت تا بعدا در محاسبات منجر به ایجاد خطا شود.من در بالا مقدار پیش فرض فیلد pi را 3.14 گذاشتم تا اگه کاربر به پراپرتی PI مقداری خارج از بازه ی 3 تا 3.14 داد ، همان مقدار پیش فرض در محاسبه بکار رود. امیدوارم ...



  • آموزش زبان برنامه نویسی سی شارپ

    آموزش زبان برنامه نویسی سی شارپ

    آموزش استفاده از کنترلهای ویندوزی (کنترل برچسب و جعبه متن)   کنترلهای ویندوزیبسیاری از کنترلهای ویندوزی در زمان استفاده مشابه کنترلهای دکمه و جعبه متن هستند. اگر به تصویر زیر نگاه کنید کنترلهایی که عموما در بسیاری از برنامه ها مورد استفاده قرار می گیرند رو خواهید دید.   همه کنترلهای استفاده شده در تصویر برنامه فوق دارای خصوصیات: Name, Text, Font, ForeColor هستند. شما می توانیداین خصوصیات را از طریق پنجره خصوصیات یا از طریق برنامه نویسی تغییر دهید.کلاس فرم که توسط محیط طراحی ویژوال استدیو ساخته شده است دارای یک سازنده به نام Form1 است که در آن متد InitializeComponent صدا زده شده است. این متد خصوصیات کنترلها را تعیین می کند و شما نیز می توانید از طریق کد خصوصیات کنترلها را تغییر دهید. البته پیشنهاد می شود که مثل من برای تغییر خصوصات کنترلها در ابتدای برنامه از یک متد جدید به نام Init استفاده شود. و این متد پس از متد InitializeComponent صدا زده شود.برای مثال برای قرار دهی مقادیر اولیه در کنترل کمبو باکس (لیست فروریز) از همین روش استفاده شده و مقادیر در متد init تعریف شده و به لیست کمبو باکس اضافه می شوند.namespace ControlTest{public partial class Form1 : Form{public Form1(){ InitializeComponent();init(); }private void init(){cboFontSize.Items.Add("8");cboFontSize.Items.Add("10");cboFontSize.Items.Add("12");cboFontSize.Items.Add("14");cboFontSize.Items.Add("18");} } } کنترل برچسب (Label)برچسب، یک فیلد نمایش متون در ویندوز است. معمولا برنامه نویسها از این کنترل در کنار کنترل جعبه متن (TextBox) استفاده می کنند. این کنترل نمی تونه فوکوس فرم را به خودش بگیره. در نتیجه کلیک روی آن یا حرکت Tab تاثیری روی کنترل برچسب ندارد. به هر حال شما می تونید بسیاری از خصوصیات این کنترل رو در زمان طراحی یا اجرا تغییر بدید.خصوصیت توضیحاتName نام کنترل که فقط در زمان طراحی قابل تغییر است BackColor رنگ زمینه برچسبBorderStyle بدون رسم مرز کنترل، FixedSingle و Fixed3DEnabled true یا false. اگر false انتخاب شده باشد، کنترل حاکستری می شود.Font تعیین یک فونت جدیدForeColor رنگ متنImage یک تصویر که در محدوده کنترل نمایش داده می شود.ImageAlign تعیین مکان قرارگیری تصویرText متن برچسبVisible true یا false. وضعیت رویت کنترل روی فرمکنترل جعبه متن (TextBox) جعبه متن یک کنترل با قابلیت تایپ متن است که به شکل تک خطی و چند خطی می تواند روی فرم تنظیم شود. شما می تونید متن این کنترل رو بگیرید یا متنی رو در کنترل قرار دهید. خصوصیات مهم این کنترل علاوه بر خصوصیات لیست شده برای برچسب عبارتند از: خصوصیت توضیحاتLines آرایه ای از جنس string که به ازای هر خط یک عنصر داردLocked اگر true انتخاب شده باشد، کاربر امکان تایپ داخل جعبه متن را نداردMultiline true یا false. تعیین کننده قابلیت تایپ ...

  • مقدمه اي بر سي شارپ : قسمت بيستم

    مقدمه اي بر سي شارپ : قسمت بيستم Delegates Delegates در سي شارپ روشي مطمئن و typesafe را براي بكار گيري مفهوم function pointer ارائه مي دهند. يكي از ابتدايي ترين استفاده هاي function pointers پياده سازي callback مي باشد. اما در ابتدا لازم است تا با اصول اوليه ي كاري آن آشنا شويم. مثال يك : يك delegate چگونه تعريف و استفاده مي شود؟ Delegate يك شيء است كه بيانگر يك تابع مي باشد بنابراين مي تواند بعنوان آرگومان ورودي يك تابع ديگر و يا عضوي از يك كلاس بكار رود. در زبان "function-pointer" ، Func1() اشاره گري به Func2() را بعنوان پارامتر دريافت كرده و نهايتا آنرا فراخواني مي كند. در زبان "delegate" ، Func1() يك شيء delegate از Func2() را دريافت كرده و سپس آنرا فراخواني مي كند. در مثال زير از دو تابع براي شرح اين مطلب سود جسته شده است: Func1() از delegate استفاده مي كند. Func2() يك delegate است. ( شماره گذاري خطوط ، در كد زير ، صرفا براي راحت تر شدن توضيحات در مورد آنها است و لزومي به تايپ آنها در برنامه ي اصلي نيست. ) <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 01 using System; 02 delegate void Delg(string sTry); 03 public class Example1{ // function which uses the delegate object 04 private static void Func1(Delg d){ 05 d("Passed from Func1"); 06 } // function which is passed as an object 07 private static void Func2(string sToPrint){ 08 Console.WriteLine("{0}",sToPrint); 09 } // Main execution starts here 10 public static void Main(){ 11 Delg d = new Delg(Func2); 12 Func1(d); 13 } 14 } LINE 02 يك شيء delegate را براي Func2 تعريف مي كند. LINE 04-06 تابعي را تعريف كرده است كه آرگومان ورودي آن از نوع Delg است. LINE 07-09 تابعي را تعريف مي كند كه بايد به صورت delegate به تابع ديگر فرستاده شود. LINE 10-14 تابع Main اجراي برنامه را با ايجاد يك شيء delegate براي Func2 آغاز كرده و سپس تابع Func1 را فراخواني مي كند. مثال 2: چگونه مي توان از delegates در كارهاي عملي استفاده كرد؟ طرح يك مساله: شخصي تقاضاي ثبت نام در يك مؤسسه ي آموزشي و همچنين تقاضاي كاريابي در يك شركت را داده است. هر كدام از اين نهادها روشي خاص خود را براي ارزيابي شخص دارند. راه حل (با روشي شيء گرا): شخص مشخصاتي همچون سن / جنس / ميزان تحصيلات قبلي / تجربيات كاري و مدارك مرتبط دارد. مؤسسه ي آموزشي تعدادي از اين مشخصات را براي ارزيابي شخص استفاده مي كند و اين امر در مورد شركت ياد شده نيز صادق است. شيء شركت و شيء آموزشگاه هر كدام توابع ارزيابي خاص خودشان را پياده سازي مي كنند. شخص ، اينترفيسي واحدي را در اختيار شركت / آموزشگاه براي ارزيابي خود قرار مي دهد. پياده سازي (با استفاده از سي شارپ): ما delegate‌ايي را تعريف مي كنيم كه بيانگر اينترفيسي است كه به شركت و آموزشگاه اجازه ي چك كردن شخص را مي دهد. سه كلاس school و company و person را تعريف مي نماييم. كلاس test را براي آزمودن اين موارد ايجاد مي كنيم. 01 using ...

  • آشنایی با کلاسها و اشیا (1)

    آشنایی با کلاسها و اشیا (1)

    سلامچند وقتی بود به دلیل مشکلات کاری نتونستم پستی را داشته باشم که در این مدت دوستان خوبم زحمت زیادی کشیدند که وبلاگ بروزرسانی بشه. به هر حال دوباره پستهام رو شروع می کنم که کمتر زحمت به دوستان بدم.ادامه مطالب آموزش سی شارپ مقدماتی رو در این پست خواهیم داشت:سری چهارم از آموزش زبان سی شارپاستفاده از کلاسها و اشیا در سی شارپهمه برنامه های سی شارپ از کلاسها بهره می برند. یک برنامه ویندوزی شامل یک پنجره خود از کلاسی به نام Form استفاده می کند.در سی شارپ مفهوم ماژولها داده های عمومی و داده های مشترک که جز مفاهیم کلاس نیستند، وجود ندارد. یک کلاس ترکیبی از متدهای Public (عمومی) و Private (خصوصی) است. معمولا ما هر کلاس را در یک فایل می نویسیم. البته این یک قانون نیست.وقتی که یک کلاس را می سازیم، این کلاس به تنهایی موجودیتی ندارد ولی می توانیم یک نمونه Instance از آن را با استفاده new ایجاد نماییم. وقتی یک نمونه از یک کلاس را می سازیم می توانیم داده هایی را برای شروع ساخت نمونه به کلاس پاس بدیم. این عمل را با استفاده از constructor انجام می دهیم. یک سازنده (constructor) یک متد هم نام با نام کلاس است که هیچ نوع داده خروجی ندارد و پارمترهای ورودی آن می توانند از صفر به بالا باشند که به ازاء هر نمونه شی ساخته شده ارسال می شوند.برنامه نمونه تبدیل دمادر این قسمت یک برنامه نمونه خواهیم نوشت. این برنامه یک مبدل دما از سانتیگراد به فارنهایت است. اگر خاطرتان باشد، آب در صفر درجه منجم شده و در صد درجه بخار می شود (البته بر حسب سانتی گراد) و در 32 درجه فارنهایت منجمد و در 212 درجه فارنهایت به بخار تبدیل می شود. خوب حالا میشه به راحتی درجه سانتیگراد رو به درجه فارنهایت تبدیل کرد.مقیاس تبدیل ما همین درجه انجماد و بخار است که برابر با 100 درجه سانتی گراد و 180 درجه فارنهایت است، پس مقیاس تبدیل ما برابر با 100/180 یا 5/9 است. و چون آب در 32 درجه فارنهایت منجمد می شود پس 32 درجه دیگر اختلاف خواهیم داشت. در نتیجه:C=(F-32)*5/9F=5/9*C+32ما در برنامه این امکان را به کاربر می دهیم تا درجه حرارت مورد نظر خود را وارد نمایید و سپس مشخص کند که به کدام واحد تبدیل شود. در آخر با زدن دکمه تبدیل (Convert) عمل تبدیل واحد صورت می گیرد.تصویر این برنامه را در شکل زیر می بینید:این هم کد برنامه تبدیل:// LIST 1private void btnConvert_Click(object sender, EventArgs e){ float temp, newTemp;//convert string to input valuetemp = Convert.ToSingle(txtTemprature.Text);//see which scale to convert toif (opFahrenheit.Checked)newTemp = 9 * temp / 5 + 32;elsenewTemp = 5 * (temp - 32) / 9;//put result in label textlblResult.Text = newTemp.ToString();txtTemprature.Text = ""; //clear entry field } یک کلاس در سی شارپ یک ماژول است که می تواند دارای دو تابع یا روال از نوع Public و Private باشد. این تابع ...

  • LINQ به زبان ساده

    حتما شما تا به حال در مورد Linq چیزایی شنیدین ، اگر با اون آشنایی کامل رو دارین که احتیاجی به خوندن این مطلب ندارین ، اما اگر شنیدین و مطالب زیادی در مورد این مطلب خوندین اما هنوز نمی دونید که Linq چیه و چیکار می کنه اون وقت شاید احتایج پیدا کنید که این مطلب رو بخونید .<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   حتما برای شما هم پیش اومده که بخواهین یک سری داده که توی یک نوع مجموعه با ساختار داده خاص قرار داره رو جستجو کنید مثل (آرایه ها و ... )و مجبور شدین واسش الگوریتم بنویسین و موارد دیگه . نمی دونم شده تا بحال با خودتون فکر کنید که چی میشد اگه میشد توی این قبیل ساختار ها هم می تونستید مثل پایگاه داده یک عبارت پرس و جو(Query) می نوشتین و قضیه حل بود ! Linq هم دقیقا همین کا رو می کنه که بدون در نظر گرفتن نوع مجموعه ورودی ، یک عبارت پرس و جو رو گرفته و جستجو رو روی اون مجموعه انجام میده و مقادیر رو به عنوان یک مجموعه جدید بر می گردونه . ساختار کد نویسی Linq رو در جدول زیر ملاحظه می کنید Using type inference to assign the resulting value(s)   var = Destination Information source providing a set of item(s) from in Source Expression specifying the selection criteria where , distinct Filter Control the ordering of the results order by , [Ascending | Descending] Order Aggregate the source items count([]), sum(), min(), max(), avg() Aggregate Shaping the output select Projection  شاید با حل یک مثال بهتر متوجه بشین using System; using System.Collections.Generic; using System.Linq;   namespace LINQIntro {    class Customer    {       public string CustomerName { get; set; }       public string ContactName { get; set; }       public string City { get; set; }       public override string ToString()       {          return this.CustomerName + ", " +             this.ContactName + ", " + this.City;       }    }      class Program    {       static void Main(string[] args)       {          Program.ShowCustomers();       }         public static void ShowCustomers()       {          // Build a list of customers using an object initializer          List<Customer> customers = new List<Customer> {             new Customer { CustomerName = "Alfreds Futterkiste",                ContactName = "Maria Anders", City = "Berlin"},             new Customer { CustomerName =                "Ana Trujillo Emparedados y helados",                ContactName = "Ana Trujillo",                City = "México D.F."},             new Customer { CustomerName =                "Antonio Moreno Taquería",                ContactName = "Antonio Moreno",                City = "México D.F."},             new Customer { CustomerName = "Around the Horn",                ContactName = "Thomas Hardy",                City = "London"},             new Customer { CustomerName = "Berglunds snabbköp",                ContactName = "Christina Berglund",                City = "Luleå"}};             // Query the list of customers and select whatever           // comes back          var customer =             ...