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

  • BroadCity

    BroadCity

    10 ŞUBAT 2010
  • friendz.net

    friendz.net

    29 EKİM 2010
  • MobileTechReview

    MobileTechRe

    6 HAZİRAN 2008