SORU
30 HAZİRAN 2011, PERŞEMBE


C# Yeni T Create()

Çalıştığım görebilirsiniz (ama başarısız) aşağıdaki kod ile yapmak için:

protected T GetObject()
{
    return new T();
}

Herhangi bir yardım büyük mutluluk duyacağız.

DÜZENLEME:

İçeriği aşağıdaki gibi oldu. Etrafında standart metotlar ile tüm denetleyicileri için özel bir denetleyici bir sınıf türetmek için oynuyordum. Bu yüzden bağlamda, kumanda türünde yeni bir nesne örneği oluşturmak için gerekli. Yazma zamanda, gibi bir şey oldu:

public class GenericController<T> : Controller
{
    ...

    protected T GetObject()
    {
        return (T)Activator.CreateInstance(ObjectType);
    }        

    public ActionResult Create()
    {
        var obj = GetObject()

        return View(obj);
    }

Ve yansıma çok kolay burada olduğuna karar verdim. Kesinlikle sorunun ifadeye bakılırsa, en uygun olarak doğru cevabı işaretlemek için bir yeni kullanan katılıyorum() kısıtlaması. Bu kadar toparlayabildim.

Şerefe!

Tim.

CEVAP
30 HAZİRAN 2011, PERŞEMBE


new Constraint bir göz atın

public class MyClass<T> where T : new()
{
    protected T GetObject()
    {
        return new T();
    }
}

T varsayılan yapıcı olmayan bir sınıf olabilir: bu durumda new T() geçersiz bir ifade olurdu. new() kısıtlama T new T() yasal kılan bir varsayılan kurucu olması gerektiğini söylüyor.

Genel bir yöntem için aynı kısıtlama uygulayabilirsiniz:

public static T GetObject<T>() where T : new()
{
    return new T();
}

[DÜZENLE]

Eğer parametreleri vermek gerekirse:

protected T GetObject(params object[] args)
{
    return (T)Activator.CreateInstance(typeof(T), args);
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • infiniTuts

    infiniTuts

    18 Ocak 2012
  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009
  • UKF

    UKF

    2 Aralık 2009