我有一个泛型类BaseCommunications,它有一个方法SendMessage。我希望能够使用泛型类型作为SendMessage方法的参数,该方法将取决于实例化类的类型T.
目前,我的基类定义为:
public class BaseCommunications<T>
{
public void SendMessage(<a message type depending on type of T>){}
}
我的基类BaseCommunications可以实现为以下之一:AMessage,BMessage等,而SendMessage方法的参数是完全不同的类型,如AMessageType,BMessageType等。我可以使用接口代替对于方法参数并使BaseCommunications类抽象并避免整个泛型的事情。意见?想法?
答案 0 :(得分:0)
很难理解你在问什么,但似乎你正在寻找以下设置:
@ViewChild('checkAll') checkAll: ElementRef;
checkedDays: string[] = [];
days = ['Monday', 'Tuesday', 'You get the idea'];
getStatus() {
let el = this.checkAll.nativeElement;
if (this.checkedDays.length === this.days.length) { el.checked = true; }
else if (!this.checkedDays.length) { el.checked = false; }
else { el.indeterminate = true; }
}
handleCheckAll() {
if (this.checkedDays.length === this.days.length) { this.checkedDays = []; }
else if (!this.checkedDays.length) { this.checkedDays = this.days; }
else { /* Chose what to do when 1 to 6 days are checked */}
}
通过此设置,您可以确保消息类型始终与处理它的Communications类兼容。
如果不能使abstract class BaseCommunications<T>
{
public void SendMessage(Message<T> message) { ... }
}
变得通用,那么你可能最好不要开始使用非通用的东西,因为所有丑陋的运行时类型检查都会开始出现,这是一个明确的标志,即泛型不是适合工作的正确工具。