NET Framework 4만 사용됨
동적으로 프로퍼티를 추가삭제할 일이생겼는데 ExpandoObject따위가 있음
dynamic
dynamic 형식을 사용하면 컴파일 타임 형식 검사를 무시하는 작업을 수행할 수 있습니다.대신, 이러한 작업은 런타임에 확인됩니다.dynamic 형식은 Office Automation API와 같은 COM API, IronPython 라이브러리와 같은 동적 API 및 HTML DOM(문서 개체 모델)에 대한 액세스를 간소화합니다.
형식 dynamic은 대부분의 환경에서 형식 object 같이 동작합니다.그러나 형식 dynamic의 식이 포함된 작업은 컴파일러에서 형식이 확인되지 않습니다.컴파일러는 작업에 대한 정보를 함께 패키지하고 해당 정보는 나중에 런타임에서 작업을 평가하는 데 사용됩니다.프로세스의 일부로 변수 형식 dynamic이 object 형식 변수에 컴파일됩니다.따라서 형식 dynamic은 런타임이 아닌 컴파일 타임에만 존재합니다.
ExpandoObject 클래스로 런타임에 그 클래스의 인스턴스 멤버들을 추가 및 삭제할 수 있으며, 이 멤버들의 값을 설정하고 가져올 수도 있습니다.이 클래스는 sampleObject.GetAttribute("sampleMember") 와 같이 더 복잡한 구문 대신 sampleObject.sampleMember와 같은 표준 구문을 사용할 수 있게 해주는 동적 바인딩을 지원합니다.
ExpandoObject 클래스
http://msdn.microsoft.com/ko-kr/library/dd487338.aspx
런타임에 동적으로 추가 및 제거할 수 있는 멤버가 있는 개체를 나타냅니다.
인스턴스 만들기
C# 에서 ExpandoObject 클래스의 인스턴스에 런타임에 바인딩을 사용하려면 반드시 dynamic 키워드를 사용해야 합니다.자세한 내용은 dynamic 형식 사용(C# 프로그래밍 가이드)을 참조하십시오.
아래에 보면 Name 과 Age라는 프로퍼티를 임의로 생성하고 있다. 오류안남 ㅋ
ExpandoObject 를 바인딩해보자!
실행된 화면
INotifyPropertyChanged 먹는다!!
// Add "using System.ComponentModel;" line // to the beginning of the file. class Program { static void Test() { dynamic employee = new ExpandoObject(); ((INotifyPropertyChanged)employee).PropertyChanged += new PropertyChangedEventHandler(HandlePropertyChanges); employee.Name = "John Smith"; } private static void HandlePropertyChanges( object sender, PropertyChangedEventArgs e) { Console.WriteLine("{0} has changed.", e.PropertyName); } }
추가로 프로퍼티도 임의로 넣기
void Window1_Loaded(object sender, RoutedEventArgs e) { List<ExpandoObject> expand = new List<ExpandoObject>(); for (int i = 0; i < 10; i++) { dynamic sampleObject = new ExpandoObject(); var p = sampleObject as IDictionary<String, object>; p["Name"] = "kojaedoo"; p["Age"] = i; if (i == 9) { p["CreateDate"] = "kojaedoo"; } expand.Add(sampleObject); } this.dataGrid1.ItemsSource = expand; } private void button1_Click(object sender, RoutedEventArgs e) { var result = this.dataGrid1.SelectedItem as IDictionary<String, object>; if (result != null) { string s = result["Name"].ToString(); //kojaedoo } }
'C#.NET' 카테고리의 다른 글
Enum 데이터바인딩 및 가져오기 (0) | 2013.05.14 |
---|---|
GroupBox Control Extensions (0) | 2013.05.06 |
[ Assembly ,어셈블리 ] 클래스 이름으로 동적으로 컨트롤 생성하기 (1) | 2013.03.08 |
개체의 선입선출(FIFO) / LIFO(후입선출) (0) | 2012.06.27 |
[ GMap.NET ] c# 에서 구글맵,빙맵등을 을 빠르고 간편하게 개발 (1) | 2012.03.13 |
[ReportViewer,리포트뷰어] 한페이지에 하나씩보여주기 (0) | 2011.10.11 |
[wic_x86_enu.exe] Microsoft .NET Framework 4 xp설치문제 (0) | 2011.08.17 |
c# 특수문제 제거 정규식 (0) | 2011.07.28 |
[배포/ ClickOnce / MIME ].application / .manifest mimetype (0) | 2011.02.25 |
[MSDN] c# 에서 운영체제(OS Version) 알아오기 (0) | 2011.01.17 |