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

  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008
  • Theodore Leaf

    Theodore Lea

    29 AĞUSTOS 2006
  • Titan Lee Hai

    Titan Lee Ha

    14 Temmuz 2008