当用户更改问题的答案时,我希望他们根据一系列原因指定原因,并根据所选原因,我想创建一个特定的子类。所以我想保持在function connect()
{
if (!SOCKET)
{
var hash = getCookie('hash');
SOCKET = io('IP:3001');
SOCKET.on('connect', function(msg) {
SOCKET.emit('hash', {
hash: hash
});
});
SOCKET.on('connect_error', function(msg) {
$.notify('Connection lost!', 'success');
});
SOCKET.on('message', function(msg) {
onMessage(msg);
});
SOCKET.on('disconnect', function() {
});
}
else
{
console.log("Error: connection already exists.");
}
}
类中创建的类型。我可以这样做,检查在运行时是否正确指定了类型:
ChangeReason
有没有办法在编译时限制类型,也许使用泛型方法?我想这样称呼它:
public class ChangeReason
{
Type _TypeToCreate;
public void SetQuestionType(Type value)
{
if (!value.IsSubclassOf(typeof(BaseAnsweredQuestion)))
throw new InvalidOperationException("Invalid Type");
_TypeToCreate = value;
}
}
答案 0 :(得分:3)
通用方法定义具有类型的占位符,例如<T>
。这是类型参数或参数。
它是一种使方法类型安全的方法,并且可以从方法内部访问类型参数。因此,无需将类型作为方法参数传递。
通过添加约束,可以将泛型方法限制为指定的基类或该基类的派生类:where T : <base class name>
。
如果基类是抽象的,添加new()
约束也会阻止使用基类型。
public void SetQuestionType<T>() where T: BaseAnsweredQuestion, new()
{
_TypeToCreate = typeof(T);
}
然后你可以使用:
来调用它reason.SetQuestionType<AnsweredQuestion>();
而不是:
reason.SetQuestionType(typeof(AnsweredQuestion));