方法参数接受多种类型
我正在开发一个应用程序,在我有多种类型的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方法
任何建议将不胜感激。
假设TransparentRichTextBox
和RichAlexBox
都是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
,如TextBox
, RichTextBox
, ComboBox
等。