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

  • Canceriansoul

    Canceriansou

    15 Ocak 2011
  • metagamers

    metagamers

    13 Mayıs 2006
  • MrExcite96

    MrExcite96

    17 ŞUBAT 2011