NET Framework 4만 사용됨

 

동적으로 프로퍼티를 추가삭제할 일이생겼는데  ExpandoObject따위가 있음

 

dynamic

http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=KO-KR&k=k(DYNAMIC_CSHARPKEYWORD);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true

 

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라는 프로퍼티를 임의로 생성하고 있다. 오류안남 ㅋ

image

 

ExpandoObject 를 바인딩해보자!

image

 

실행된 화면

image

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           

            }
        }

+ Recent posts