Method parameter to accept multiple types
Solution 1
Assuming that TransparentRichTextBox
and RichAlexBox
are both subtypes of
RichTextBox
, then you only need one method signature:
private void ChangeFontStyle(RichTextBox rch, FontStyle style, bool add)
{
//Doing somthing with rch.Rtf
}
Otherwise, you will need to implement the method for every overload:
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
}
Solution 2
If you are properly using inheritance, you don't need generics or overloading:
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
}
As @dotnetkid suggests, another option is to make ChangeFontStyle
a method in the RichTextBox class and make it virtual so that you can override it when you need to:
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
}
Solution 3
When overloading a method do like this.
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
}
Or you can just use Control
class as a parameter try like this
private void ChangeFontStyle(Control control,FontStyle style, bool add)
{
// your code
}
You can pass any Control you want like TextBox
, RichTextBox
, ComboBox
etc..
Alex Jolig
Persian and proud. I'm Ghasem Sherafati, a software engineer. You can also find me by my nickname (AlexJolig) almost everywhere, Specialties: Python JavaScript/ES7 React HTML5/CSS3 ... More info.. Feel free to contact me about anything: [email protected]
Updated on July 09, 2022Comments
-
Alex Jolig almost 2 years
I'm developing an application which in I got multiple types of
RichTextBox
s which I've customized(RichTextBox,RichAlexBox,TransparentRichTextBox)
.I want to create a method to accept all those types plus some other parameters.
private void ChangeFontStyle(RichTextBox,RichAlexBox,TransparentRichTextBox rch, FontStyle style, bool add) { //Doing somthing with rch.Rtf }
I've searched through StackOverFlow and found some answers like this which I couldn't figure out how to use them to solve my problem
void foo<TOne, TTwo>() //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
I also tried overloading as this answer offers,
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 }
But I encounter this error
'ChangeFontStyle(RichAlexBox, FontStyle, bool)' must declare a body because it is not marked abstract, extern, or partial
Here's some other Q&A I checked:
Generic method with multiple constraints
Can I create a generic method that accepts two different types in C#
C# generic method with one parameter of multiple types
Any suggestion would be appreciated.