ExpandoObject 클래스

정의

런타임에 동적으로 추가 및 제거할 수 있는 멤버가 있는 개체를 나타냅니다.Represents an object whose members can be dynamically added and removed at run time.

public ref class ExpandoObject sealed : System::Collections::Generic::ICollection<System::Collections::Generic::KeyValuePair<System::String ^, System::Object ^>>, System::Collections::Generic::IDictionary<System::String ^, System::Object ^>, System::Collections::Generic::IEnumerable<System::Collections::Generic::KeyValuePair<System::String ^, System::Object ^>>, System::ComponentModel::INotifyPropertyChanged, System::Dynamic::IDynamicMetaObjectProvider
public sealed class ExpandoObject : System.Collections.Generic.ICollection<System.Collections.Generic.KeyValuePair<string,object>>, System.Collections.Generic.IDictionary<string,object>, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string,object>>, System.ComponentModel.INotifyPropertyChanged, System.Dynamic.IDynamicMetaObjectProvider
type ExpandoObject = class
    interface IDynamicMetaObjectProvider
    interface IDictionary<string, obj>
    interface INotifyPropertyChanged
    interface ICollection<KeyValuePair<string, obj>>
    interface seq<KeyValuePair<string, obj>>
    interface IEnumerable
Public NotInheritable Class ExpandoObject
Implements ICollection(Of KeyValuePair(Of String, Object)), IDictionary(Of String, Object), IDynamicMetaObjectProvider, IEnumerable(Of KeyValuePair(Of String, Object)), INotifyPropertyChanged
상속
ExpandoObject
구현

설명

ExpandoObject 클래스를 사용 하면 런타임에 해당 인스턴스의 멤버를 추가 및 삭제 하 고 이러한 멤버의 값을 설정 하 고 가져올 수 있습니다.The ExpandoObject class enables you to add and delete members of its instances at run time and also to set and get values of these members. 이 클래스는 sampleObject.GetAttribute("sampleMember")와 같은 보다 복잡 한 구문 대신 sampleObject.sampleMember 같은 표준 구문을 사용할 수 있도록 하는 동적 바인딩을 지원 합니다.This class supports dynamic binding, which enables you to use standard syntax like sampleObject.sampleMember instead of more complex syntax like sampleObject.GetAttribute("sampleMember").

ExpandoObject 클래스는 표준 DLR (동적 언어 런타임) 인터페이스 IDynamicMetaObjectProvider를 구현 하 여 DLR 상호 운용성 모델을 지 원하는 언어 간에 ExpandoObject 클래스의 인스턴스를 공유할 수 있도록 합니다.The ExpandoObject class implements the standard Dynamic Language Runtime (DLR) interface IDynamicMetaObjectProvider, which enables you to share instances of the ExpandoObject class between languages that support the DLR interoperability model. 예를 들어에서 C# ExpandoObject 클래스의 인스턴스를 만든 다음 IronPython 함수에 전달할 수 있습니다.For example, you can create an instance of the ExpandoObject class in C# and then pass it to an IronPython function. 자세한 내용은 동적 언어 런타임 개요 및 C# 질문과 대답 웹 사이트에서 ExpandoObject 소개 를 참조 하세요.For more information, see Dynamic Language Runtime Overview and Introducing the ExpandoObject on the C# Frequently Asked Questions Web site.

ExpandoObject 클래스는 멤버를 가져오고, 설정 하 고, 호출할 수 있도록 하는 동적 개체 개념의 구현입니다.The ExpandoObject class is an implementation of the dynamic object concept that enables getting, setting, and invoking members. 고유한 동적 디스패치 의미 체계가 있는 형식을 정의 하려면 DynamicObject 클래스를 사용 합니다.If you want to define types that have their own dynamic dispatch semantics, use the DynamicObject class. 동적 개체가 상호 운용성 프로토콜에 참여 하는 방법을 정의 하 고 DLR 빠른 동적 디스패치 캐싱을 관리 하려면 IDynamicMetaObjectProvider 인터페이스의 고유한 구현을 만듭니다.If you want to define how dynamic objects participate in the interoperability protocol and manage DLR fast dynamic dispatch caching, create your own implementation of the IDynamicMetaObjectProvider interface.

인스턴스 만들기Creating an Instance

에서 C#ExpandoObject 클래스의 인스턴스에 대해 런타임에 바인딩을 사용 하려면 dynamic 키워드를 사용 해야 합니다.In C#, to enable late binding for an instance of the ExpandoObject class, you must use the dynamic keyword. 자세한 내용은 dynamic 형식 사용을 참조하세요.For more information, see Using Type dynamic.

Visual basic에서 런타임에 바인딩하여 동적 작업은 지원 됩니다.In Visual Basic, dynamic operations are supported by late binding. 자세한 내용은 초기 바인딩 및 런타임에 바인딩을 참조 하세요.For more information, see Early and Late Binding.

다음 코드 예제에서는 ExpandoObject 클래스의 인스턴스를 만드는 방법을 보여 줍니다.The following code example demonstrates how to create an instance of the ExpandoObject class.

dynamic sampleObject = new ExpandoObject();
Dim sampleObject As Object = New ExpandoObject()

새 멤버 추가Adding New Members

ExpandoObject 클래스의 인스턴스에 속성, 메서드 및 이벤트를 추가할 수 있습니다.You can add properties, methods, and events to instances of the ExpandoObject class.

다음 코드 예제에서는 ExpandoObject 클래스의 인스턴스에 새 속성을 추가 하는 방법을 보여 줍니다.The following code example demonstrates how to add a new property to an instance of the ExpandoObject class.

sampleObject.test = "Dynamic Property";
Console.WriteLine(sampleObject.test);
Console.WriteLine(sampleObject.test.GetType());
// This code example produces the following output:
// Dynamic Property
// System.String
sampleObject.Test = "Dynamic Property"
Console.WriteLine(sampleObject.test)
Console.WriteLine(sampleObject.test.GetType())
' This code example produces the following output:
' Dynamic Property
' System.String

메서드는 필요할 때 호출할 수 있는 대리자로 저장 되는 람다 식을 나타냅니다.The methods represent lambda expressions that are stored as delegates, which can be invoked when they are needed. 다음 코드 예제에는 동적 속성의 값을 증가 시키는 메서드를 추가 하는 방법을 보여 줍니다.The following code example demonstrates how to add a method that increments a value of the dynamic property.

sampleObject.number = 10;
sampleObject.Increment = (Action)(() => { sampleObject.number++; });

// Before calling the Increment method.
Console.WriteLine(sampleObject.number);

sampleObject.Increment();

// After calling the Increment method.
Console.WriteLine(sampleObject.number);
// This code example produces the following output:
// 10
// 11
sampleObject.Number = 10
sampleObject.Increment = Function() sampleObject.Number + 1
' Before calling the Increment method.
Console.WriteLine(sampleObject.number)

sampleObject.Increment.Invoke()

' After calling the Increment method.
Console.WriteLine(sampleObject.number)
' This code example produces the following output:
' 10
' 11

다음 코드 예제에서는 ExpandoObject 클래스의 인스턴스에 이벤트를 추가 하는 방법을 보여 줍니다.The following code example demonstrates how to add an event to an instance of the ExpandoObject class.

class Program  
{  
    static void Main(string[] args)  
    {  
        dynamic sampleObject = new ExpandoObject();  
  
        // Create a new event and initialize it with null.  
        sampleObject.sampleEvent = null;  
  
        // Add an event handler.  
        sampleObject.sampleEvent += new EventHandler(SampleHandler);  
  
        // Raise an event for testing purposes.  
        sampleObject.sampleEvent(sampleObject, new EventArgs());  
   }  
  
    // Event handler.  
    static void SampleHandler(object sender, EventArgs e)  
    {  
        Console.WriteLine("SampleHandler for {0} event", sender);  
    }  
}  
// This code example produces the following output:  
// SampleHandler for System.Dynamic.ExpandoObject event.  
Module Module1  
  
Sub Main()  
    Dim sampleObject As Object = New ExpandoObject()  
  
    ' Create a new event and initialize it with null.  
    sampleObject.sampleEvent = Nothing  
  
    ' Add an event handler.  
    Dim handler As EventHandler = AddressOf SampleHandler  
    sampleObject.sampleEvent =   
        [Delegate].Combine(sampleObject.sampleEvent, handler)  
  
    ' Raise an event for testing purposes.  
    sampleObject.sampleEvent.Invoke(sampleObject, New EventArgs())  
  
End Sub  
  
' Event handler.  
Sub SampleHandler(ByVal sender As Object, ByVal e As EventArgs)  
    Console.WriteLine("SampleHandler for {0} event", sender)  
End Sub  
  
' This code example produces the following output:  
' SampleHandler for System.Dynamic.ExpandoObject event.  
  
End Module  

매개 변수로 전달합니다.Passing As a Parameter

ExpandoObject 클래스의 인스턴스를 매개 변수로 전달할 수 있습니다.You can pass instances of the ExpandoObject class as parameters. 이러한 인스턴스는 동적 개체 C# 및 Visual Basic에서 런타임에 바인딩된 개체 처리 함을 note 합니다.Note that these instances are treated as dynamic objects in C# and late-bound objects in Visual Basic. 즉, 개체 멤버에 대 한 IntelliSense 없는 존재 하지 않는 멤버를 호출할 때 컴파일러 오류가 표시 되지 않습니다.This means that you do not have IntelliSense for object members and you do not receive compiler errors when you call non-existent members. 존재 하지 않는 멤버를 호출 하면 예외가 발생 합니다.If you call a member that does not exist, an exception occurs.

다음 코드 예제에는 만들고 이름 및 속성의 값을 인쇄 하는 방법을 사용 하는 방법을 보여 줍니다.The following code example demonstrates how you can create and use a method to print the names and values of properties.

class Program
{
    static void Main(string[] args)
    {
        dynamic employee, manager;

        employee = new ExpandoObject();
        employee.Name = "John Smith";
        employee.Age = 33;

        manager = new ExpandoObject();
        manager.Name = "Allison Brown";
        manager.Age = 42;
        manager.TeamSize = 10;

        WritePerson(manager);
        WritePerson(employee);
    }
    private static void WritePerson(dynamic person)
    {
        Console.WriteLine("{0} is {1} years old.",
                          person.Name, person.Age);
        // The following statement causes an exception
        // if you pass the employee object.
        // Console.WriteLine("Manages {0} people", person.TeamSize);
    }
}
// This code example produces the following output:
// John Smith is 33 years old.
// Allison Brown is 42 years old.
Sub Main()
    Dim employee, manager As Object

    employee = New ExpandoObject()
    employee.Name = "John Smith"
    employee.Age = 33

    manager = New ExpandoObject()
    manager.Name = "Allison Brown"
    manager.Age = 42
    manager.TeamSize = 10

    WritePerson(manager)
    WritePerson(employee)
End Sub

Private Sub WritePerson(ByVal person As Object)

    Console.WriteLine("{0} is {1} years old.",
                      person.Name, person.Age)
    ' The following statement causes an exception
    ' if you pass the employee object.
    ' Console.WriteLine("Manages {0} people", person.TeamSize)

End Sub

멤버 열거 및 삭제Enumerating and Deleting Members

ExpandoObject 클래스는 IDictionary<String, Object> 인터페이스를 구현합니다.The ExpandoObject class implements the IDictionary<String, Object> interface. 이렇게 하면 런타임에 ExpandoObject 클래스의 인스턴스에 추가 된 멤버를 열거할 수 있습니다.This enables enumeration of members added to the instance of the ExpandoObject class at run time. 이 경우 모르는 컴파일 타임에 인스턴스가 가질 수 있는 멤버에 유용할 수 있습니다.This can be useful if you do not know at compile time what members an instance might have.

다음 코드 예제에서는 ExpandoObject 클래스의 인스턴스를 IDictionary<TKey,TValue> 인터페이스로 캐스팅 하 고 인스턴스의 멤버를 열거 하는 방법을 보여 줍니다.The following code example shows how you can cast an instance of the ExpandoObject class to the IDictionary<TKey,TValue> interface and enumerate the instance's members.

dynamic employee = new ExpandoObject();
employee.Name = "John Smith";
employee.Age = 33;

foreach (var property in (IDictionary<String, Object>)employee)
{
    Console.WriteLine(property.Key + ": " + property.Value);
}
// This code example produces the following output:
// Name: John Smith
// Age: 33
Dim employee As Object = New ExpandoObject()
employee.Name = "John Smith"
employee.Age = 33
For Each member In CType(employee, IDictionary(Of String, Object))
    Console.WriteLine(member.Key & ": " & member.Value)
Next
' This code example produces the following output:
' Name: John Smith
' Age: 33

멤버를 삭제 하는 구문 (예: C# 및 Visual Basic)이 없는 언어에서는 ExpandoObject 인스턴스를 IDictionary<String, Object> 인터페이스로 암시적으로 캐스팅 한 다음 멤버를 키/값 쌍으로 삭제 하 여 멤버를 삭제할 수 있습니다.In languages that do not have syntax for deleting members (such as C# and Visual Basic), you can delete a member by implicitly casting an instance of the ExpandoObject to the IDictionary<String, Object> interface and then deleting the member as a key/value pair. 다음 예제에서 이를 확인할 수 있습니다.This is shown in the following example.

dynamic employee = new ExpandoObject();
employee.Name = "John Smith";
((IDictionary<String, Object>)employee).Remove("Name");
Dim employee As Object = New ExpandoObject()
employee.Name = "John Smith"
CType(employee, IDictionary(Of String, Object)).Remove("Name")

속성 변경 알림 받기Receiving Notifications of Property Changes

ExpandoObject 클래스는 INotifyPropertyChanged 인터페이스를 구현 하며 멤버가 추가, 삭제 또는 수정 될 때 PropertyChanged 이벤트를 발생 시킬 수 있습니다.The ExpandoObject class implements the INotifyPropertyChanged interface and can raise a PropertyChanged event when a member is added, deleted, or modified. 이를 통해 Windows Presentation Foundation (WPF) 데이터 바인딩과 개체 콘텐츠의 변경 내용에 대 한 알림이 필요한 다른 환경에 ExpandoObject 클래스를 통합할 수 있습니다.This enables ExpandoObject class integration with Windows Presentation Foundation (WPF) data binding and other environments that require notification about changes in the object content.

다음 코드 예제에 대 한 이벤트 처리기를 만드는 방법을 보여 줍니다는 PropertyChanged 이벤트입니다.The following code example demonstrates how to create an event handler for the PropertyChanged event.

// 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);
    }
}
' Add "Imports System.ComponentModel" line 
' to the beginning of the file.
Sub Main()
    Dim employee As Object = New ExpandoObject
    AddHandler CType(
        employee, INotifyPropertyChanged).PropertyChanged,
        AddressOf HandlePropertyChanges
    employee.Name = "John Smith"
End Sub

Private Sub HandlePropertyChanges(
       ByVal sender As Object, ByVal e As PropertyChangedEventArgs)
    Console.WriteLine("{0} has changed.", e.PropertyName)
End Sub

생성자

ExpandoObject()

멤버가 없는 새 ExpandoObject를 초기화합니다.Initializes a new ExpandoObject that does not have members.

메서드

Equals(Object)

지정한 개체가 현재 개체와 같은지를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 string을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

명시적 인터페이스 구현

ICollection<KeyValuePair<String,Object>>.Add(KeyValuePair<String,Object>)

지정된 키가 있는 ICollection<T>에 지정한 값을 추가합니다.Adds the specified value to the ICollection<T> that has the specified key.

ICollection<KeyValuePair<String,Object>>.Clear()

컬렉션에서 모든 항목을 제거합니다.Removes all items from the collection.

ICollection<KeyValuePair<String,Object>>.Contains(KeyValuePair<String,Object>)

ICollection<T>에 특정 키와 값이 들어 있는지 여부를 확인합니다.Determines whether the ICollection<T> contains a specific key and value.

ICollection<KeyValuePair<String,Object>>.CopyTo(KeyValuePair<String,Object>[], Int32)

지정한 배열 인덱스부터 ICollection<T>의 요소를 KeyValuePair<TKey,TValue>형식의 배열에 복사합니다.Copies the elements of the ICollection<T> to an array of type KeyValuePair<TKey,TValue>, starting at the specified array index.

ICollection<KeyValuePair<String,Object>>.Count

ICollection<T>의 요소 수를 가져옵니다.Gets the number of elements in the ICollection<T>.

ICollection<KeyValuePair<String,Object>>.IsReadOnly

ICollection<T>이 읽기 전용인지를 표시하는 값을 가져옵니다.Gets a value indicating whether the ICollection<T> is read-only.

ICollection<KeyValuePair<String,Object>>.Remove(KeyValuePair<String,Object>)

컬렉션에서 키와 값을 제거합니다.Removes a key and value from the collection.

IDictionary<String,Object>.Add(String, Object)

지정된 키와 값을 사전에 추가합니다.Adds the specified key and value to the dictionary.

IDictionary<String,Object>.ContainsKey(String)

사전에 지정한 키가 포함되는지 여부를 확인합니다.Determines whether the dictionary contains the specified key.

IDictionary<String,Object>.Item[String]

지정된 키를 갖는 요소를 가져오거나 설정합니다.Gets or sets the element that has the specified key.

IDictionary<String,Object>.Keys

ICollection<T>의 키가 포함된 IDictionary<TKey,TValue>을 가져옵니다.Gets an ICollection<T> that contains the keys of the IDictionary<TKey,TValue>.

IDictionary<String,Object>.Remove(String)

IDictionary에서 지정한 키가 있는 요소를 제거합니다.Removes the element that has the specified key from the IDictionary.

IDictionary<String,Object>.TryGetValue(String, Object)

지정된 키와 연결된 값을 가져옵니다.Gets the value associated with the specified key.

IDictionary<String,Object>.Values

ICollection<T>의 값을 포함하는 IDictionary<TKey,TValue>을 가져옵니다.Gets an ICollection<T> that contains the values in the IDictionary<TKey,TValue>.

IDynamicMetaObjectProvider.GetMetaObject(Expression)

제공 된 MetaObject 동적 가상 메서드에 디스패치 됩니다.The provided MetaObject will dispatch to the dynamic virtual methods. 개체는 개별 작업에 대 한 사용자 지정 동작을 제공 하도록 다른 metaobject 캡슐화 할 수 있습니다.The object can be encapsulated inside another MetaObject to provide custom behavior for individual actions.

IEnumerable.GetEnumerator()

컬렉션에서 반복되는 열거자를 반환합니다.Returns an enumerator that iterates through the collection.

IEnumerable<KeyValuePair<String,Object>>.GetEnumerator()

컬렉션에서 반복되는 열거자를 반환합니다.Returns an enumerator that iterates through the collection.

INotifyPropertyChanged.PropertyChanged

속성 값이 변경될 때 발생합니다.Occurs when a property value changes.

확장 메서드

Remove<TKey,TValue>(IDictionary<TKey,TValue>, TKey, TValue)

key에서 지정된 dictionary을(를) 사용하여 값 제거하려고 시도합니다.Tries to remove the value with the specified key from the dictionary.

TryAdd<TKey,TValue>(IDictionary<TKey,TValue>, TKey, TValue)

지정된 keyvalue을(를) dictionary에 추가하려고 시도합니다.Tries to add the specified key and value to the dictionary.

CopyToDataTable<T>(IEnumerable<T>)

제네릭 매개 변수 TDataTable인 지정된 입력 DataRow 개체를 사용하여 IEnumerable<T> 개체의 복사본이 들어 있는 DataRow을 반환합니다.Returns a DataTable that contains copies of the DataRow objects, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption)

제네릭 매개 변수 TDataRow인 지정된 입력 DataTable 개체를 사용하여 IEnumerable<T> 개체를 지정된 DataRow에 복사합니다.Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

CopyToDataTable<T>(IEnumerable<T>, DataTable, LoadOption, FillErrorEventHandler)

제네릭 매개 변수 TDataRow인 지정된 입력 DataTable 개체를 사용하여 IEnumerable<T> 개체를 지정된 DataRow에 복사합니다.Copies DataRow objects to the specified DataTable, given an input IEnumerable<T> object where the generic parameter T is DataRow.

Cast<TResult>(IEnumerable)

IEnumerable의 요소를 지정된 형식으로 캐스팅합니다.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable)

지정된 형식에 따라 IEnumerable의 요소를 필터링합니다.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable)

쿼리를 병렬화할 수 있도록 합니다.Enables parallelization of a query.

AsQueryable(IEnumerable)

IEnumerableIQueryable로 변환합니다.Converts an IEnumerable to an IQueryable.

Ancestors<T>(IEnumerable<T>)

소스 컬렉션에 있는 모든 노드의 상위 항목을 포함 하는 요소의 컬렉션을 반환 합니다.Returns a collection of elements that contains the ancestors of every node in the source collection.

Ancestors<T>(IEnumerable<T>, XName)

소스 컬렉션에 있는 모든 노드의 상위 항목이 들어 있는 필터링 된 요소 컬렉션을 반환 합니다.Returns a filtered collection of elements that contains the ancestors of every node in the source collection. 일치하는 XName이 있는 요소만 컬렉션에 포함됩니다.Only elements that have a matching XName are included in the collection.

DescendantNodes<T>(IEnumerable<T>)

소스 컬렉션에 있는 모든 문서 및 요소의 하위 노드의 컬렉션을 반환합니다.Returns a collection of the descendant nodes of every document and element in the source collection.

Descendants<T>(IEnumerable<T>)

소스 컬렉션에 있는 모든 요소 및 문서의 하위 요소가 들어 있는 요소 컬렉션을 반환합니다.Returns a collection of elements that contains the descendant elements of every element and document in the source collection.

Descendants<T>(IEnumerable<T>, XName)

소스 컬렉션에 있는 모든 요소 및 문서의 하위 요소가 들어 있는 필터링된 요소 컬렉션을 반환합니다.Returns a filtered collection of elements that contains the descendant elements of every element and document in the source collection. 일치하는 XName이 있는 요소만 컬렉션에 포함됩니다.Only elements that have a matching XName are included in the collection.

Elements<T>(IEnumerable<T>)

소스 컬렉션에 있는 자식 컬렉션의 모든 요소 및 문서의 요소를 반환합니다.Returns a collection of the child elements of every element and document in the source collection.

Elements<T>(IEnumerable<T>, XName)

소스 컬렉션의 필터링 된 자식 컬렉션을 모든 요소 및 문서의 요소를 반환합니다.Returns a filtered collection of the child elements of every element and document in the source collection. 일치하는 XName이 있는 요소만 컬렉션에 포함됩니다.Only elements that have a matching XName are included in the collection.

InDocumentOrder<T>(IEnumerable<T>)

모든 노드가 문서 순으로 정렬 된 소스 컬렉션에 포함 된 노드의 컬렉션을 반환 합니다.Returns a collection of nodes that contains all nodes in the source collection, sorted in document order.

Nodes<T>(IEnumerable<T>)

소스 컬렉션에 있는 자식 컬렉션의 모든 문서 및 요소의 노드를 반환합니다.Returns a collection of the child nodes of every document and element in the source collection.

Remove<T>(IEnumerable<T>)

부모 노드에서 소스 컬렉션에 있는 모든 노드를 제거합니다.Removes every node in the source collection from its parent node.

적용 대상