그래서 좀 번의 실험을하고 있었는데, 나는이 중에 발견 :런타임시 제네릭 형식에서 상속받을 수는 있지만 컴파일 시간이 아닌 이유는 무엇입니까?
public class SelfOfT
{
// This won't compile
public class FailureOf<T> : T
{
}
}
실패,이, 다른 한편으로는 :
public class SelfOfT
{
public interface IMyInterface
{
}
public static void Second()
{
// This works fine, and achieves the same end as what I'm trying to do with FailureOf<T>
AssemblyName name = new AssemblyName("Dynamics");
AssemblyBuilder asmBuilder = AssemblyBuilder.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);
ModuleBuilder modbuilder = asmBuilder.DefineDynamicModule("MyModule");
TypeBuilder typeBuild = modbuilder.DefineType("SuccessfulOf", TypeAttributes.Public);
typeBuild.AddInterfaceImplementation(typeof(IMyInterface));
var TParam = typeBuild.DefineGenericParameters(new String[] { "T" }).First();
TParam.SetGenericParameterAttributes(GenericParameterAttributes.None);
Type myType = typeBuild.CreateType();
Type genericMyType = myType.MakeGenericType(typeof(IMyInterface));
IMyInterface my = (IMyInterface)Activator.CreateInstance(genericMyType);
}
}
가 잘 작동합니다. 그것은 런타임에 어쨌든 그것을 할 수 있다면 그냥 컴파일 시간에 사용할 수 있도록 많은 문제를 저장하는 것 같습니다. 실제로 반사를 사용
두 번째 스 니펫에서 'SuccessfulOf'이'T'를 확장한다고 선언합니까? –
dtb
대답을 바탕으로 내가 본 것은' '이 무엇인지 알고 있기 때문에 내가하고있는 일에서 벗어날 수 있습니다. 하지만 나는''을 단독으로 할 수 없다면 왜'IEnumerable '을 구현할 수 있습니까? 두 경우 모두 'T'는 알 수 없습니다. –
sircodesalot
@sircodesalot을': IEnumerable'와 함께 사용하면, 단순히 그 타입 인자를 전달할뿐입니다. 이는 임의의 유형에서 서브 클래스를 작성하거나 구현하는 것과는 전혀 다른 아이디어입니다. 그래서'class C : object, T'를 가질 수 없습니다. 언어가 그런 종류의 표현력을 허용한다면 흥미로울 것입니다. 그러나 C#은 그렇지 않습니다. –