方法参数接受多种类型

我正在开发一个应用程序,在我有多种类型的RichTextBox我已经定制(RichTextBox,RichAlexBox,TransparentRichTextBox)

我想创建一个方法来接受所有这些类型加上一些其他参数。

 private void ChangeFontStyle(RichTextBox,RichAlexBox,TransparentRichTextBox rch, FontStyle style, bool add) { //Doing somthing with rch.Rtf } 

我通过StackOverFlow搜索并找到了一些这样的答案,我无法弄清楚如何使用它们来解决我的问题

 void foo() //There's just one parameter here where TOne : BaseOne //and I can't figure out how to define my other two parameters where TTwo : BaseTwo 

我也试过重载,因为这个答案提供,

 private void ChangeFontStyle(TransparentRichTextBox rch, FontStyle style, bool add); private void ChangeFontStyle(RichAlexBox rch, FontStyle style, bool add); private void ChangeFontStyle(RichTextBox rch,FontStyle style, bool add) { //Some codes } 

但是我遇到了这个错误

 'ChangeFontStyle(RichAlexBox, FontStyle, bool)' must declare a body because it is not marked abstract, extern, or partial 

这是我检查的其他一些问答:

具有多个约束的通用方法

我可以创建一个在C#中接受两种不同类型的generics方法吗

具有多个类型的一个参数的C#generics方法

任何建议将不胜感激。

假设TransparentRichTextBoxRichAlexBox都是RichTextBox子类型,那么您只需要一个方法签名:

 private void ChangeFontStyle(RichTextBox rch, FontStyle style, bool add) { //Doing somthing with rch.Rtf } 

否则,您将需要为每个重载实现该方法:

 private void ChangeFontStyle(TransparentRichTextBox rch, FontStyle style, bool add) { //Some codes } private void ChangeFontStyle(RichAlexBox rch, FontStyle style, bool add) { //Some codes } private void ChangeFontStyle(RichTextBox rch,FontStyle style, bool add) { //Some codes } 

如果您正确使用inheritance,则不需要generics或重载:

 class RichTextBox { // implementation } class RichAlexBox : RichTextBox { // implementation } class TransparentRichTextBox : RichTextBox { // implementation } // allows passing in anything that inherits from RichTextBox private void ChangeFontStyle(RichTextBox rch, FontStyle style, bool add) { // implementation } 

正如@dotnetkid建议的那样,另一个选择是使ChangeFontStyle成为RichTextBox类中的一个方法,并将其设置为虚拟,以便在需要时可以覆盖它:

 class RichTextBox { public virtual void ChangeFontStyle(FontStyle style, bool add) { // implementation } // implementation } class RichAlexBox : RichTextBox { // uses the inherited ChangeFontStyle // implementation } class TransparentRichTextBox : RichTextBox { public override void ChangeFontStyle(FontStyle style, bool add) { // TransparentRichTextBox-specific implementation } // implementation } 

重载方法时,请执行此操作。

 private void ChangeFontStyle(TransparentRichTextBox rch, FontStyle style, bool add) { // your code } private void ChangeFontStyle(RichAlexBox rch, FontStyle style, bool add) { // your code } private void ChangeFontStyle(RichTextBox rch,FontStyle style, bool add) { // your code } 

或者您可以使用Control类作为参数尝试这样

  private void ChangeFontStyle(Control control,FontStyle style, bool add) { // your code } 

您可以传递任何您想要的TextBox ,如TextBoxRichTextBoxComboBox等。