본문 바로가기

   
Programming/LINQ

var, initializer, AnonymousType, AnonymousMethod, ExtensionMethod

반응형

var

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data;

 

namespace Ex01

{

       class Ex01_var

       {

             static void Main(string[] args)

             {

                    //var

                    // - 암묵적 타입변수(Iplicitly Typed Local Variable)

                    // - 처음에는 변수의 타입이 정해져 있지 않다가(object형 성질) 처음 데이터가 대입되는 순간 그 데이터의 타입으로 변수의 타입이 결정

                    // - 데이터가 대입된 이후는 변수의 타입이 불변!!!!

                    //var object와 비교

                    // - 둘다 모든 데이터를 대입가능

                    // - var은 한번 대입하면 그 이후 다른 형을 대입X

                    // - var은 지역 변수로만 사용가능

 

                    var num = 10;

                    var name = "홍길동";

 

                    //Console.WriteLine(num+10);//int 변수

                    //Console.WriteLine(name);//string 변수

 

                    int[] ns = { 1,2,3,4,5 };

                    string[] ms = { "","","" };

 

                    foreach (var n in ns)

                    {

                           //var n -> int n 과 동일하게 취급

                           Console.WriteLine(n);

                    }

 

                    foreach (var m in ms)

                    {

                           //var m -> string m 과 동일하게 취급

                           Console.WriteLine(m);

                    }

 

                    //DataSet -> 테이블(DataTable) -> Rows(DataRow)

                    DataTable dt = new DataTable();

 

                    for (int i = 0; i < dt.Rows.Count; i++)

                    {

                           Console.WriteLine(dt.Rows[i][name].ToString());

                    }

 

                    foreach (DataRow row in dt.Rows)

                    {

                           Console.WriteLine(row["name"].ToString());

                    }

 

                    foreach (var row in dt.Rows)

                    {

                           //var row -> DataRow row 와 동일학게 취급

                           //참조형 -> 형변환...

                           Console.WriteLine(((DataRow)row)["name"]);

                    }

             }

       }

}

 





Initializer

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Ex01

{

       class Ex02_Initializer

       {

             static void Main(string[] args)

             {

                    //클래스 인스턴스 생성시 멤버 변수 초기화 기술

                    //1. 생성자

                    //2. 객체 초기자

                    Student s1 = new Student();

                    s1.Name = "홍길동";

                    s1.Kor = 100;

                    s1.Eng = 90;

                    s1.Math = 80;

 

                    Student s2 = new Student { Name = "하하하", Kor = 90, Eng = 95, Math = 90 };//s1 과 동일

                    Console.WriteLine(s2.Kor);

 

                    Student s3 = new Student { Name = "하하하", Kor = 90, Eng = 95, Math = 90 };//s1 과 동일

             }

       }

 

       //클래스 선언

       class Student

       {

             private string name;

             public int Kor { get; set; }

             public int Eng { get; set; }

             public int Math { get; set; }

 

             public string Name

             {

                    set { this.name = value; }

                    get { return this.name; }

             }

       }

}

 




AnonymousType

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Ex01

{

       class Ex03_AnonymousType

       {

             static void Main(string[] args)

             {

                    //익명 형식

                    // - 인스턴스가 필요함!! -> 클래스를 생성X -> 인스턴스를 만들일이 단 1번이라서!!

                    // - 클래스 없이 인스턴스를 만들고자 할때 사용

 

                    //Student s1 = new Student();

                    //var s1 = new Student();

                    var s1 = new { Name="홍길동", kor=100, Eng=90, Math=80 };

                    Console.WriteLine(s1);

                    Console.WriteLine(s1.Name);

                    Console.WriteLine(s1.kor);

 

                    //object s2 = new object { Name = "홍길동", Kor = 100, Eng = 90, Math = 80 };

                    //object는 형변환이 필요하다.

             }

       }

}

 

 



AnonymousMethod

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Ex01

{

 

       public delegate int Sample (int a, int b);

 

       class Ex04_AnonymousMethod

       {

             static void Main(string[] args)

             {

                    //익명 메소드

                    //델리게이트의 일종

 

                    //Sum()을 델리게이트를 통해서 호출

                    Sample s = new Sample(Sum);

                    int result = Sum(30, 50);

                    Console.WriteLine(result);

 

                    int result2 = Sum(100, 200);

                    Console.WriteLine(result2);

 

                    //익명메서드의 전제조건

                    // - 생성된 메서드가 직접 호출할 경우는 X, 오로지 델리게이트에 의해서만 호출되는 경우

                    Sample s2 = delegate(int a, int b)

                    {

                           return a + b;

                    };

 

                    int result3 = s2(5, 5);

                    Console.WriteLine(result3);

             }

 

             public static int Sum(int a, int b)

             {

                    return a + b;

             }

       }

}

 

 

 

-------------------------------------------Wiform 익명 메서드-----------------------------



using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace Winform

{

       public partial class Form1 : Form

       {

             public Form1()

             {

                    InitializeComponent();

             }

 

             private void button1_Click(object sender, EventArgs e)

             {

                    //동적으로 버튼 추가

                    Button btn = new Button();

                    btn.Text = "동적 버튼";

                    btn.Click += new EventHandler(btn_Click);

                    groupBox1.Controls.Add(btn);

 

                    //2. 버튼 클릭외에 무단으로 메서드가 호출되는 경우...

                    //btn_Click(null, null);//허용0, 허용X

 

                    btn.Click += delegate(object s, EventArgs ee)

                    {

                           MessageBox.Show("클릭!!");

                    };

 

                    //이벤트와 메서드를 한번에 사용하기 위해서 사용되는 기법이다.(java script 에서도 많이 사용한다.)

             }

 

             //1. 클릭되는 이벤트 선언부분과 호출되는 이벤트핸들러(메서드) 선언 부분이 별도

             void btn_Click(object sender, EventArgs e)

             {

                    MessageBox.Show("버튼이 클릭 되었습니다.");

             }

       }

}

 

 



ExtensionMethod(확장 메서드)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Ex01

{

       class Ex05_ExtensionMethod

       {

             //Ex05_ExtensionMethod.cs

             static void Main(string[] args)

             {

                    //확장 메서드(Extension Method)

                    // - 클래스를 선언할 당시에는 없었는데.. 그 이후에 필요에 의해서 클래스에 메서드를 추가하는 기술

 

                    //DateTime -> 메서드를 추가

                    DateTime now = DateTime.Now;//현재시간

 

                    //방금전? 몇시?(10분 전)

                    Console.WriteLine(now.방금전().ToString());

 

                    Console.WriteLine(now.내생일().ToString());

             }

       }

 

       //확장 메서드 만드는 방법

       //1. 클래스 선언(, 클래스의 이름은 무관 - 맘대로)

       // - 정적 클래스(인스턴스를 생성못함)

       public static class ExtensionClass

       {

             //2. static 메서드 선언 -> 확장 메서드로서 사용*****

             // - 매개변수 선언 앞에 this 키워드 추가

             // - 매개변수는 반드시 확장하고 싶은 클래스타입으로 선언

             public static DateTime 방금전(this DateTime date)

             {

                    return date.AddMinutes(-10);

             }

 

             public static DateTime 내생일(this DateTime date)

             {

                    return new DateTime(1980, 10, 5);

             }

       }

 

       class Test

       {

             public void AAA()

             {

                    Console.WriteLine("AAA");

             }

             public void BBB()

             {

                    Console.WriteLine("BBB");

             }

       }

}

 

 





using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Ex01

{

       //2번 방식에 필요한 델리게이트 선언

       public delegate int MyDelegate(int num);

 

       class Ex06_Lambda

       {

             static void Main(string[] args)

             {

                    //LINQ(Language Integrated Query)

                    // - 링크

                    // - 통합 질의 언어

                    // - 데이터의 종류와 상관없이 일관된 접근 방식으로 데이터에 대한 접근을 제공하는 언어

                    // - 배열, 컬렉션, DB, XML -> 1개의 언어로 접근

 

                    //**************************************시작 개념**

                    //람다식(Lambda Expression)

                    // - 람다식의 역할?

 

                    //요구사항] 정수 입력 -> 2를 곱한 결과 반환

                    //1. 메서드 생성 -> 호출 -> 반환

 

                    int num = 5;//원본

 

                    Console.WriteLine("result1 : {0}",Method(num));

 

 

                    //2. 메서드를 델리게이트 통해서 호출

                    MyDelegate my2 = new MyDelegate(Method);

 

                    int result2 = my2(num);

                    Console.WriteLine("result2 : {0}", result2);

 

                    //3. 익명 메서드를 사용

                    // - 사전에 델리게이트가 준비되어 있어야함!!

                    MyDelegate my3 = delegate(int n)

                    {

                           return n * 10;

                    };

 

                    int result3 = my3(num);

                    Console.WriteLine("result3 : {0}", result3);

 

                    //4. 람다식 사용

                    // - 델리게이트가 필요!!

                    //MyDelegate my4 = n=> n*2;

                   

                    //인자리스트 => 메서드 본문 + 반환값

                    //MyDelegate my4 = (n) => n * 2;

 

                    //이름없는 메서드가 발전한 형태이다.

                    //MyDelegate my4 = n => { return n * 2};

                    MyDelegate my4 = (n) => { return n * 2; };

                   

                    int result4 = my4(num);

                    Console.WriteLine("result4 : {0}", result4);

             }

 

             public static int Method(int num)

             {

                    return num * 5;

             }

       }

}

 



 

반응형