具有不同类型的通用参数的方法的泛型类

时间:2018-01-08 08:54:53

标签: c# generics

我有一个泛型类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类抽象并避免整个泛型的事情。意见?想法?

1 个答案:

答案 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) { ... } } 变得通用,那么你可能最好不要开始使用非通用的东西,因为所有丑陋的运行时类型检查都会开始出现,这是一个明确的标志,即泛型不是适合工作的正确工具。