My Programming Notes

Here are Notes.... come from debugging

My Programming Notes

Here are Notes.... come from debugging

۷ مطلب با موضوع «C#.net» ثبت شده است

چهارشنبه, ۲۱ تیر ۱۳۹۶، ۰۴:۵۰ ب.ظ

تفاوت بین Interface های Enumerator و Enumerable در C# - قسمت دوم

 

-- ادامه پست قبل

  مثال های از استفاده از IEnumerable ,  IEnumerator Interface:

        }ngth; i++)

}

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class ColorEnumerator : IEnumerator
    {
        string[] _colors;
        int _position = -1;
        public ColorEnumerator(string[] theColors) // Constructor
        {
            _colors = new string[theColors.Length];
            for (int i = 0; i < theColors.Length; i++)
                _colors[i] = theColors[i];
        }
        public object Current // Implement Current.
        {
            get
            {
                if (_position == -1)
                    throw new InvalidOperationException();
                if (_position >= _colors.Length)
                    throw new InvalidOperationException();
                return _colors[_position];
            }
        }
        public bool MoveNext() // Implement MoveNext.
        {
            if (_position < _colors.Length - 1)
            {
                _position++;
                return true;
            }
            else
                return false;
        }
        public void Reset() // Implement Reset.
        {
            _position = -1;
        }
    }
    class Spectrum : IEnumerable
    {
        string[] Colors = { "violet", "blue", "cyan", "green", "yellow", "orange", "red" };
        public IEnumerator GetEnumerator()
        {
            return new ColorEnumerator(Colors);
        }
    }
    class Program
    {
        static void Main()
        {
            Spectrum spectrum = new Spectrum();
            foreach (string color in spectrum)
                Console.WriteLine(color);
        }
    }

 خروجی :

violet

blue

cyan

green

yellow

orange

red

  

Generic Enumeration Interfaces  :

ما تا الان در مورد Non Generic Enumeration Interfaces   بحث کردیم ولی در واقعیت ما بیشتر از نوع مطمئن Generic Enumeration Interfaces  استفاده می کنیم . که آنها خود IEnumerable  و IEnumerator interfaces. دارند.

مهمترین تفاوت NonGeneric و Generic  موارد زیر هستند:

       در  the NonGeneric Interface form  :

متد GetEnumerator     از اینترفیس  IEnumerable نمونه ای  از کلاس enumerator  را بر می گرداند که IEnumerator را پیاده سازی می کند.

کلاسی که IEnumerator  را پیاده سازی می کند همچنین خصوصیت  Current  را  پیاده سازی می کند که  refrence ای از نوع object بر می گرداند. که در نهایت باید به نوع واقعی شی تبدیل شود.

  در  the Generic Interface form    :

متد GetEnumerator   از اینترفیس  IEnumerable نمونه ای  از کلاس IEnumerator را برمی پرداند.

کلاسی که IEnumerator را پیاده سازی می کند همچنین خصوصیت Current را هم پیاده سازی می کند که یک مقدا رواقعی را نمونه سازی میکند به جای  reference  به شی کلاس پایه.

 


۰ نظر موافقین ۰ مخالفین ۰ ۲۱ تیر ۹۶ ، ۱۶:۵۰
سارا زکی زاده
شنبه, ۳ تیر ۱۳۹۶، ۰۴:۲۰ ب.ظ

تفاوت بین Interface های Enumerator و Enumerable در C#

 

انواع  Enumerators  و  Enumerable :

تعریف :

"  Enumerator  شی ای است که قابلیت بازگرداندن  هر مورد از یک لیست و گروه داده ای را  به صورت یک به یک و ترتیبی که از آن درخواست میشود را دارد.  Enumerator به طبقه بندی موارد آگاه است و پیگیری می کند که کجای رشته قرار دارد.

و بعد از آن مقدار مورد جاری را بنا به در خواست باز می گرداند.

Enumerable یک نوع است که یک متد به نام GetEnumerator  دارد که این متد یک enumerator برمی گرداند برای بازگردانی مورد ها.

برای درک بهتر  Enumerators   و  Enumerable نگاهی به یک  مثال می اندازیم :

در مثال زیر ما یک آرایه شامل 5 المان تعریف می کنیم و بعد از ان از یک حلقه foreach برای نمایش مقادیر هر مورد.

class Program

   {

       static void Main()

       {

           int[] arr1 = { 1, 2, 3, 4, 5 }; // Define the array.

 

           foreach (int item in arr1) // Enumerate the elements.

               Console.WriteLine("Item value: {0}", item);

       }

   }

خروجی :

Item value: 1

Item value: 2

Item value: 3

Item value: 4

Item value: 5

 

                                            Enumerables

در مثال بالا :

·         شیء enumerator   را  به وسیله  تابع  GetEnumerator   صدا میزنیم .

·         هر مورد را از enumerator  در خواست می کند و به عنوان متغیر تکراری در کد قابل دسترس قرار می دهد.

 IEnumerator Interface :

 

اینترفیس  IEnumerable  توسط یک کلاس IEnumerable  پیاده سازی می شود.

اینترفیس IEnumerable   فقط یک متد دارد : GetEnumerator  که یک enumerator را برمی گرداند.

                                                     IEnumerator

- Current مقدار جایگاه جاری در رشته را برمی گرداند.

  - خصوصیت read-only است.

  - یک مقدار reference  از نوع داده ای را برمی گرداند پس شی می تواند هر جنسی داشته باشد.

  -MoveNext  متدی است که enumerator را به موقعیت بعدی مکانی پیش می برد. و یک مقدار بولین برمی گرداند که نشان دهنده معتبر بودن موقعیت بعدی و یا انتهای رشته می باشد.

  - اگر موقعیت بعدی معتبر باشد مقدار true است.

  - اگر موقعیت بعدی معتبر نباشد (فرا تر از انتهای رشته باشد) مقدار false است.

  - موقعیت ابتدایی enumerator  ، قبل از اولین مورد در رشته است. پس تابع MoveNext  باید قبل از اولین دسترسی به Current فراخوانی شود.

  - Reset  برای  بازنشانی مجدد موقعیت مکانی داخلی استفاده می شود.

مثال :


class Program

    {

        static void Main()

        {

            List<int> list = new List<int>();

            list.Add(1);

            list.Add(2);

            list.Add(3);

            list.Add(4);

            list.Add(5);

 

            List<int>.Enumerator e = list.GetEnumerator();

            Write(e);

        }

 

        static void Write(IEnumerator<int> e)

        {

            while (e.MoveNext())

            {

                int value = e.Current;

                Console.WriteLine(value);

            }

        }

    } 

 


   }  خروجی:

 

1
2
3
4
5



IEnumerable Interface :

یک کلاس enumerable ، یک  اینترفیس IEnumerable  را پیاده سازی می کند.

اینترفیس IEnumerable  تنها یک متد دارد: GetEnumerator که یک enumerator برمی گرداند.



    IEnumerable




using System.Collections;

 

//Implement the IEnumerable interface

class MyClass : IEnumerable

{

public IEnumerator GetEnumerator { ... }

...


} //Returns an object of type IEnumerator

 

 

 

 

 

using System.Collections;

class MyColors: IEnumerable

{

string[] Colors = { "Red", "Yellow", "Blue" };

public IEnumerator GetEnumerator()

{

return new ColorEnumerator(Colors);//An instance of the enumerator class

}


}


ادامه در پست بعدی .....

۰ نظر موافقین ۰ مخالفین ۰ ۰۳ تیر ۹۶ ، ۱۶:۲۰
سارا زکی زاده
چهارشنبه, ۲ مهر ۱۳۹۳، ۰۷:۰۹ ب.ظ

ًُُSQL Injection یا تزریق SQL

سر کلاس بودیم و استاد داشتند از عامل ارتباط بین لایه های مختلف نرم افزار – Data Access Layer – می گفتند.

در یک مثال ساده یک فرم لاگین (Log In) درست کردیم . در پایگاه داده هم چند یوزر با اطلاعات کامل ازشون داشتیم.

در تست اولیه با یک دید کاملا مثبت به همه چیز و همه کس یک  Username و Password معتبر را وارد کردیم و عملیات لاگین انجام شد.

در دفعه دوم یک  Username و Password غیر معتبر وارد کردیم و پیغام متناسب با آن نمایش داده شد.

موارد بالا هر کدام در بهترین حالت می تواند اتفاق بیفتد ولی همان طور که موقع طراحی نرم افزار مخصوصا قسمت UserInterface آن باید پایین ترین میزان علم و آگاهی و آشنایی کاربر را نسبت به نرم افزار در نظر بگیریم ، برای ریزه کاری های امنیتی هم باید بالاترین میزان هوش را برای کاربر و بالاخص افراد سودجو در نظر گرفت.*

یکی از حالت های بدی که ممکن است در وارد کردن اطلاعات چنین فرم اتفاق بیفتد یک روش هک است به نام SQL Injection  که در لغت به معنی تزریق کد SQL است.

 

 SQL Injection   یعنی :

هک برنامه از طریق وارد کردن دستورات مخرب T- SQL و وارد کردن آسیب جدی به ساختار برنامه.

        

 

۱ نظر موافقین ۴ مخالفین ۰ ۰۲ مهر ۹۳ ، ۱۹:۰۹
سارا زکی زاده
چهارشنبه, ۲۷ شهریور ۱۳۹۲، ۱۰:۴۰ ب.ظ

ارسال ایمیل /نرم افزار ارسال ایمیل

پس از یک تاخیر طولانی مدت ،دوباره برگشتم تا با انرژی بیشتر مطالب جدیدی را که آموختم در وبلاگم منتشر کنم.

بنا به درخواست یکی از دوستان تصمیم گرفتم نرم افزاری جهت ارسال ایمیل با محتوای کد html (مانند اکثر ایمل های تبلیغاتی) تهیه کنم.این نرم افزار باید با گرفتن یک لیست از آدرس های ایمیل ، متن ایمیل درخواستی را به همه آدرس های انتخاب شده ارسال نماید.
در اولین مرحله تحقیق کردم که چگونه می شود با زبان C# کدی را نوشت که پروسه ارسال ایمیل را انجام دهد.
۲ نظر موافقین ۴ مخالفین ۰ ۲۷ شهریور ۹۲ ، ۲۲:۴۰
سارا زکی زاده
پنجشنبه, ۳۱ مرداد ۱۳۹۲، ۱۰:۳۰ ب.ظ

NaN چیست؟؟

 چند روز پیش داشتم روی یک کلاس کار می کردم که محاسباتی رو باید انجام می داد. تصور کردم که تمام مواردی که توی اون کلاس باید نوشته می شد، تموم شده و رفتم برای تست نهایی که اونو در اختیار دیگر همکارانم قرار بدهم... متاسفانه موقع دیباگ کردن با خطایی رو به رو شدم که می گفت این مقدار برابر NaN است!!

۲ نظر موافقین ۵ مخالفین ۰ ۳۱ مرداد ۹۲ ، ۲۲:۳۰
سارا زکی زاده
جمعه, ۱۱ مرداد ۱۳۹۲، ۰۵:۴۸ ب.ظ

ورودی Text Box را محدود کنیم!

 فرمی داشتم که در آن تعدادی text Box برای ورود اطلاعات نیاز بود. این text Box ها اختصاصا باید عدد می گرفتند و یه جورایی کاربر نباد حروف الفبا وارد می کرد. برای اینکه از خطاهایی که در صورت وارد کردن کاراکتر الفبا در این text Box ها هنگام محاسبات جلوگیری کنم باید مانع ورود حروف می شدم.

یعنی اگر کاربر حتی کلید های حروف را می فشرد ، هیچ چیزی در text Box ثبت نشود.

بعد از جستجو (Google) در منابع موجود به راه حل زیر رسیدم:

در Text Box مورد نظر event (رویداد) PreviewTextInput را  اضافه می کنیم.

در CS فرم (Window در WPF) ابتدا NameSpace : System.Text.RegularExpression اضافه می کنیم.

کد زیر را در رویداد TextBox می نویسیم.

;("[Regex Regex = new Regex("[0-9

;(e.handled = Regex.IsMatched(e.text

# محدوده 0 تا 9 که مشخص کردم ، می تواند با هر محدوده دیگری و یا هر شرایطی که برای textBox خود می خواهید قائل شوید جایگزین شود. مثلا اگر می خواهید همه کاراکترها به جز این اعداد را بپذیرد می توانید به صورت ^9-0^ بنویسید. ^ : یعنی به جز!

#handled  کلاسی از NameSpace:System.Windows.Forms است. این کلاس مقداردهی مربوط به روریداد KeyPress (فشردن صفحه کلید) را انجام می دهد.


۳ نظر موافقین ۸ مخالفین ۱ ۱۱ مرداد ۹۲ ، ۱۷:۴۸
سارا زکی زاده
جمعه, ۴ مرداد ۱۳۹۲، ۰۳:۰۷ ق.ظ

خواندن داده از یک فایل Excel در C#

اولین مطلبی که موقع کار کردن با WPF یاد گرفتم نحوه گرفتن داده از دیتا بیس بود.

فرض کنید دیتا بیس شما یک فایل Excel باشد. برای اینکه بتوانیم از اطلاعات موجود در آن استفاده کنیم باید با آن مثل Sql برخورد کنیم.

برای اینکار از کلاس oleDb استفاده می کنیم.

این کلاس یک Data Reader  است که برای خواندن سطر های دیتا بیس از آن استفاده می شود.

موقع استفاده از آن باید Namespace: using system.oleDb و Namespace : using system.Data رو حتما به Namespace   ها اضافه کنید.

حالا با استفاده از oleDb یک connection می سازیم که به دیتا بیس مورد نظر متصل بشیم.

یعنی یک متغیر را مثل زیر از جنس string تعریف می کنیم و عبارت زیر را مثل نمونه به آن می دهیم. این متغیر نشان می دهد که متا  می خواهیم از یک فایل Excel استفاده کنیم. پس از آن یک نمونه از  OleDbCommand می سازیم.


string ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties= 'Excel 12.0;HDR=yes


;()OleDbCommand oleDBCmd = new OleDbCommand


از Command استفاده می کنیم تا بتوانیم دستور اتصال به دیتا بیس را صادر کنیم و نوع دستور و جزئیاتش را مشخص کنیم.


  ,oleDBCmd.Connection = new OleDbConnection(String.Format(connectionString 

;(("C:\Users\SZ\Desktop\New File - Sample.xlsx"@


        ( if (oleDBCmd.Connection.State != ConnectionState.Open

        }

         

;  () oleDBCmd.Connection.Open

       {

        ; oleDBCmd.CommandType = CommandType.Text


همان طور که در بالا می بینید ابتدا برای برقراری اتصال ، آدرس محل قرار گرفتن  فایل را قید کردم سپس وضعیت Connection  را  بررسی کردم که حتما open باشدسپس نوع  دستور را به  CommandType  به صورت Text  دادم که خودم دستور را دستی بنویسم مانند دستوراتی که در Query های Sql  می نویسیم.

با همان مقررات.

به کد زیر توجه کنید:

   [$string cmdText = "SELECT  [Name] as [Title] ,[Id] FROM [PersonId] from [Student

         

  

      ; oleDBCmd.CommandText = cmdText


با این روش اتصال به دیتابیس (فایل Excel ) برقرار می شود. برای خواندن فایل و جدول های موجود هم باید از کلاس OleDbDataReader استفاده کرد.


دانلود مثال WPF

! دقت کنید که همین مثال می تواند با توجه به شرایط Windows Forms Application نوشته شود.

۴۴ نظر موافقین ۶ مخالفین ۰ ۰۴ مرداد ۹۲ ، ۰۳:۰۷
سارا زکی زاده