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; } } }