Benim projemde, aşağıdaki arabirimi kullanıyorum: Filter<T>.Checker<U>
da arabirimi IChecker. Bu gibi görünmektedir:İç içe geçmiş Genel bir sınıf türü C genel bir sınıfta olsun C#
class Filter<T> {
public interface IChecker {
...
}
public class Checker<U> : IChecker {
...
}
List<IChecker> checkers;
...
}
Filtre sınıfı filtre U
T. bu alanın tipi olan sınıf T farklı alanları kontrol etmek iChecker listesini kullanmaktadır tipi T nesneleri filtrelerFarklı bir sınıftaki başka bir yöntemde, bir denetleyici örneği oluşturmak istiyorum. Bu yöntemde, T'nin türü derleme zamanında bilen İşlemdir. U'nun türü sadece bir Tip örneği tarafından bilinir. Aşağıdaki kod, normalde Tür'ü bilen genel bir sınıf örneğini nasıl oluşturacağınızı gösterir.
Type type = typeof(MyObject<>).MakeGenericType(objectType);
object myObject = Activator.CreateInstance(type);
aşağıdaki bu biraz daha alıp yapmak istiyorum:
Type type = typeof(Filter<Transaction>.Checker<>).MakeGenericType(objectType);
object myObject = Activator.CreateInstance(type);
parçası typeof(Filter<Transaction>.Checker<>)
derleme değil. Derleyici şöyle diyor: Unexpected use of an unbounded generic name
.
C# dilinde Genel bir sınıfta yuvalanmış bir Genel sınıf türünü almak mümkün mü?
zaten cevapları yayınlanmıştır eklemek için - bu [MSDN] (https üzerinde belgelerinde anlatılmış: //msdn.microsoft.com/en-us/library/system.type.makegenerictype%28v=vs.110%29.aspx). ** İç içe Tipler ** bölümünün tamamını kontrol edin, özellikle: * "İç içe tür için genel tür tanımından genel bir tür oluşturmak için, tüm kapalı türlerin tür bağımsız değişken dizilerini birleştirerek oluşturulmuş diziyle MakeGenericType yöntemini çağırın. En dış genel türden başlayıp iç içe türün kendisinin tür parametrelerine sahipse, iç içe türün tür argüman dizisiyle biter. – MarcinJuraszek