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.sampleMember 와 같은 더 복잡 한 구문 대신 sampleObject.GetAttribute("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의 인스턴스를 공유할 수 있습니다는 ExpandoObject DLR 상호 운용성 모델을 지 원하는 언어 사이의 클래스입니다.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. 예를 들어 인스턴스를 만들 수 있습니다는 ExpandoObject C#에서 클래스 및 다음 IronPython 함수에 전달 합니다.For example, you can create an instance of the ExpandoObject class in C# and then pass it to an IronPython function. 자세한 내용은 참조 하세요. 동적 언어 런타임 개요 하 고 는 ExpandoObject 소개 C# 자주 묻는 질문 웹 사이트입니다.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 빠른 동적 디스패치 caching을 관리 하는 방법에 대 한 고유한 구현을 만들는 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) 멤버 삭제 되지 않은 언어에서의 인스턴스를 암시적으로 캐스팅 하 여 멤버를 삭제할 수 있습니다 합니다 ExpandoObjectIDictionary<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. 그러면 ExpandoObject 클래스 Windows Presentation Foundation (WPF) 데이터 바인딩 및 개체 내용에서 변경 내용에 대 한 알림이 필요로 하는 다른 환경으로 통합 합니다.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()

현재 개체를 나타내는 문자열을 반환합니다.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

IDictionary<TKey,TValue>의 키가 포함된 ICollection<T>을 가져옵니다.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)
TryAdd<TKey,TValue>(IDictionary<TKey,TValue>, TKey, TValue)
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.

적용 대상