问题
Here is an example of what I am looking to do.
public class A
{
public virtual void DoSomething(string a)
{
// perform something
}
}
public class B : A
{
public Override void DoSomething(string a, string b)
{
// perform something slightly different using both strings
}
}
So I want to override DoSomething from class A and allow it to pass a second parameter. Is this possible?
回答1:
When overriding a virtual method, you must keep the original "contract" of the method, which in your case is a string a variable.
In order to do what you want, you can create a virtual overload which takes two strings:
public class A
{
public virtual void DoSomething(string a)
{
// perform something
}
public virtual void DoSomething(string a, string b)
{
// perform something
}
}
public class B : A
{
public override void DoSomething(string a, string b)
{
// perform something slightly different using both strings
}
}
If what you want is to accept N strings in your method, you can use the params keyword:
public class A
{
public virtual void DoSomething(params string[] allStrings)
{
// Do something with the first string in the array
// perform something
}
}
回答2:
No, this won't work. When overriding the methods needs to have the same prototype.
回答3:
No, this would be overloading. Since the logic would be 'slightly different' it sounds like you would need two different methods anyway? You could put your similar logic in a 3rd method and call that from both DoSomething(string A) and DoSomething(string A, string B)
回答4:
Slight necro, but when you overload you can call the original method from the new one.
so
public class B : A {
public virtual void DoSomething (string a, string b) {
base.DoSomething(_a);
//Do B things here
}
}
This allows you to modify the method instead of completely redoing it :)
来源:https://stackoverflow.com/questions/27547122/c-sharp-override-with-different-parameters