HEJ
我有以下设置:
大会1
public abstract class XX<T> : XX where T: YY { }
public abstract class XX {}
Run Code Online (Sandbox Code Playgroud)
大会2
public class ZZ : YY {}
public class ZZFriend : XX<ZZ> {}
Run Code Online (Sandbox Code Playgroud)
我在YY中使用此功能进行反射:
public class YY {
public Type FindFriend {
return GetType().Assembly.GetTypes().FirstOrDefault(
t => t.BaseType != null &&
t.BaseType.IsGenericType &&
typeof(XX).IsAssignableFrom(t) &&
t.BaseType.GetGenericArguments().FirstOrDefault() == GetType());
}
}
Run Code Online (Sandbox Code Playgroud)
我想不要继承非泛型类XX的继承:
public class ZZFriend: XX {}
Run Code Online (Sandbox Code Playgroud)
或者,我需要一个方法(可以在YY.FindFrind()中的反射中使用):
public Type F(Type t) {
return GetTypeThatIsGeneric(XX, Type genericTypeParameter);
}
Run Code Online (Sandbox Code Playgroud)
这可以在YY中用作:
Typeof(XX<ZZ) == F(typeof(GetType())
Run Code Online (Sandbox Code Playgroud)
希望有道理......
提前致谢
SørenRokkedal
您可以在XX以下位置创建内部构造函数:
public abstract class XX
{
internal XX()
{
}
}
Run Code Online (Sandbox Code Playgroud)
(或者,如果您已经有明确声明的构造函数,请将它们全部设置为私有或内部.)
这将阻止任何其他程序集声明派生类,因为没有构造函数可以链接到.