Aracılığıyla paylaş


Dinamik (C# Reference)

dynamic Türü içinde oluşur derleme zamanı tür denetlemesi atlamak işlemlerini etkinleştirir.Bunun yerine, bu işlem çalışma zamanında çözümlenir.dynamic Türü Office Otomasyonu API gibi com API'lerindeki ve ayrıca IronPython kitaplıkları gibi dinamik API ve html Document Object Model (dom) için erişimi basitleştirir.

Tür dynamic türü gibi davranan object çou durumda.Ancak, türündeki ifadeler içeren işlemleri dynamic çözülmüş değil veya türü derleyici tarafından denetlenir.Derleyici paketleri birlikte operasyon hakkındaki ve bu bilgileri daha sonra operasyon değerlendirmek için kullanılan çalışma zamanı.Tip değişkenler işleminin bir parçası olarak dynamic türündeki değişkenler derlenmiş object.Bu nedenle, yazın dynamic yalnızca derleme zamanında, çalışma zamanında değil bulunmaktadır.

Aşağıdaki örnek bir değişken türü karşıtlıkları gösterilmiştir dynamic türünde bir değişken için object.Her değişkenin türü derleme zamanında doğrulamak için üzerine fareyi getirin dyn veya obj , WriteLine deyimleri.IntelliSense gösterir dinamik için dyn ve nesne için obj.

class Program
{
    static void Main(string[] args)
    {
        dynamic dyn = 1;
        object obj = 1;

        // Rest the mouse pointer over dyn and obj to see their
        // types at compile time.
        System.Console.WriteLine(dyn.GetType());
        System.Console.WriteLine(obj.GetType());
    }
}

WriteLine Deyimlerini görüntülemek çalışma zamanı tür dyn ve obj.Bu noktada, her ikisi de aynı türde olması tamsayı.Şu çıktı üretilir:

System.Int32

System.Int32

Arasındaki farkı görmek için dyn ve obj derleme zamanında bildirimleri arasında aşağıdaki iki satırı ekleyin ve WriteLine önceki örnekte ifadeler.

dyn = dyn + 3;
obj = obj + 3;

Denenen Ayrıca bir tamsayı ve deyim içinde bir nesne için bir derleyici hatası bildirdi obj + 3.Ancak, herhangi bir hata için bildirilen dyn + 3.İçeren ifade dyn derleme zamanında çünkü denetlenmemiştir türü dyn olan dynamic.

Context

dynamic Anahtar sözcüğünü doğrudan veya bir bileşen olarak oluşturulmuş bir türü aşağıdaki durumlarda görüntülenebilir:

  • Bir özelliği, alan, dizin oluşturucu, parametre türü bildirimleri dönüş değeri, yerel bir değişken veya kısıtlama yazın.Aşağıdaki sınıf tanımı kullanan dynamic , birkaç farklı tanımlamalar.

    class ExampleClass
    {
        // A dynamic field.
        static dynamic field;
    
        // A dynamic property.
        dynamic prop { get; set; }
    
        // A dynamic return type and a dynamic paramater type.
        public dynamic exampleMethod(dynamic d)
        {
            // A dynamic local variable.
            dynamic local = "Local variable";
            int two = 2;
    
            if (d is int)
            {
                return local;
            }
            else
            {
                return two;
            }
        }
    }
    
  • Açık türü dönüştürmelerinde, hedef türü bir dönüştürme.

    static void convertToDynamic()
    {
        dynamic d;
        int i = 20;
        d = (dynamic)i;
        Console.WriteLine(d);
    
        string s = "Example string.";
        d = (dynamic)s;
        Console.WriteLine(d);
    
        DateTime dt = DateTime.Today;
        d = (dynamic)dt;
        Console.WriteLine(d);
    
    }
    // Results:
    // 20
    // Example string.
    // 2/17/2009 9:12:00 AM
    
  • Bağlamda burada türleri hizmet değerleri olarak gibi sağ alt tarafında bir is işleci veya bir as işleci veya bağımsız değişken olarak typeof oluşturulmuş bir tür bir parçası olarak.Örneğin, dynamic aşağıdaki deyimlerde kullanılan.

    int i = 8;
    dynamic d;
    // With the is operator.
    // The dynamic type behaves like object. The following
    // expression returns true unless someVar has the value null.
    if (someVar is dynamic) { }
    
    // With the as operator.
    d = i as dynamic;
    
    // With typeof, as part of a constructed type.
    Console.WriteLine(typeof(List<dynamic>));
    
    // The following statement causes a compiler error.
    //Console.WriteLine(typeof(dynamic));
    

Örnek

Aşağıdaki örnek dynamic birkaç bildirimleri içinde.Main Yöntemi ayrıca derleme zamanı tür denetlemesini çalışma zamanı tür denetlemesi ile karşıtlıkları gösterilmiştir.

using System;

namespace DynamicExamples
{
    class Program
    {
        static void Main(string[] args)
        {
            ExampleClass ec = new ExampleClass();
            Console.WriteLine(ec.exampleMethod(10));
            Console.WriteLine(ec.exampleMethod("value"));

            // The following line causes a compiler error because exampleMethod
            // takes only one argument.
            //Console.WriteLine(ec.exampleMethod(10, 4));

            dynamic dynamic_ec = new ExampleClass();
            Console.WriteLine(dynamic_ec.exampleMethod(10));

            // Because dynamic_ec is dynamic, the following call to exampleMethod
            // with two arguments does not produce an error at compile time.
            // However, itdoes cause a run-time error. 
            //Console.WriteLine(dynamic_ec.exampleMethod(10, 4));
        }
    }

    class ExampleClass
    {
        static dynamic field;
        dynamic prop { get; set; }

        public dynamic exampleMethod(dynamic d)
        {
            dynamic local = "Local variable";
            int two = 2;

            if (d is int)
            {
                return local;
            }
            else
            {
                return two;
            }
        }
    }
}
// Results:
// Local variable
// 2
// Local variable

Daha fazla bilgi ve örnekler için bkz, Tür dinamik (C# Programlama Kılavuzu) kullanma.

Ayrıca bkz.

Görevler

Nasıl yapılır: güvenli olarak kullanma artığını ve işleç (C# Programlama Kılavuzu)

İzlenecek yol: Dinamik Nesneler Oluşturma ve Kullanma (C# and Visual Basic)

Başvuru

nesne (C# Reference)

(C# Başvurusu)

(C# Başvurusu)

typeof (C# Reference)

System.Dynamic.ExpandoObject

System.Dynamic.DynamicObject

Diğer Kaynaklar

Tür dinamik (C# Programlama Kılavuzu) kullanma