SORU
5 Kasım 2008, ÇARŞAMBA


Oluşturulmuş Bir Sistem Başarılı.Bir Yazın türü olarak Genel bir Sınıf için Parametre

Başlık biraz belirsiz. Bilmek istediğim şey, eğer bu mümkün değilse

string typeName = <read type name from somwhere>;
Type myType = Type.GetType(typeName);

MyGenericClass<myType> myGenericClass = new MyGenericClass<myType>();

Belli ki, MyGenericClass olarak tanımlanır:

public class MyGenericClass<T>

Şu anda, derleyici bu 'tür veya ad 'myType' bulunamadı." yakınıyor Bunu yapmanın bir yolu olmalı.

CEVAP
5 Kasım 2008, ÇARŞAMBA


Yansıma olmadan bunu yapamazsın. Ancak, senolabiliryansıması ile. İşte tam bir örnek:

using System;
using System.Reflection;

public class Generic<T>
{
    public Generic()
    {
        Console.WriteLine("T={0}", typeof(T));
    }
}

class Test
{
    static void Main()
    {
        string typeName = "System.String";
        Type typeArgument = Type.GetType(typeName);

        Type genericClass = typeof(Generic<>);
        // MakeGenericType is badly named
        Type constructedClass = genericClass.MakeGenericType(typeArgument);

        object created = Activator.CreateInstance(constructedClass);
    }
}

Not: Eğer genel bir sınıf birden fazla türde kabul ederse, örneğin: tür adları atladığınızda virgül içermelidir

Type genericClass = typeof(IReadOnlyDictionary<,>);
Type constructedClass = genericClass.MakeGenericType(typeArgument1, typeArgument2);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • Gigawipf

    Gigawipf

    18 ŞUBAT 2010