olarak sınırlandırılıyor C# jenerik parametresine bir sınırlama belirtilebilir, burada bu parametrenin soyut olması gerekir? Şu anda jenerik parametresinin parametresiz bir kurucuya sahip olması gereken bir yöntemim var ancak şimdi soyut bir T'ye gereksinim duyduğum bir senaryoda çalışıyorum. Bu nedenle, yöntemi yalnızca soyut olarak kabul eden bir yöntemle aşırı yükleyeceğini umuyordumGenel parametre
public static void SomeMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, new()
{
T tThing = new T();
//do something simple
}
public static T SomeOtherMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, new()
{
T tThing = new T();
//do something simple
}
public static void SomeMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, abstract()
{
//do something clever
}
public static T SomeOtherMethod<T>(IEnumberable<T> SomeParam) where T:SomeBase, abstract()
{
//do something clever
}
Şüphelendiğim gibi, yanıt "bunu yapamazsınız" ise, mantıklı bir çözüm var mı?
- ve size soyut bir kısıtlamayı gerektiğini düşünüyorum bunu yapmak istediğini belli değil onun. Soyut olan bir sınıfa (örneğin, kodunuzdaki 'SomeBase') sınırlama yapabilirsiniz. – Jamiec
Yeni sınırlama, değer veya referans türünüzün olup olmadığını belirlemek için basitçe vardır. Ancak soyut bir kısıtlama için pratik bir kullanım göremiyorum. IEnumerable 'ın ne gibi yararları var ki,' IEnumerable 'da buna sahip değil misiniz? –
HimBromBeere
* SomeBase * 'i yeni bir özet sınıfına miras bırakıp * T: NewAbstractClass *' ı kullanarak nasıl? – bit