Here is an example of what I am looking to do.
public class A
{
public virtual void DoSomething(string a)
{
// perform something
}
}
public
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
}
}
No, this won't work. When overriding the methods needs to have the same prototype.
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)
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 :)
There is a way. It requires some code though. You create a master class fex. 'MachineParams'. Then create subclasses like 'MachineParamsGeneral', 'MachineParamsDetail'.
Your function can now be like:
public override void Setup(MachineParams p)
{
// since you know what subclass this is inside, you can simple cast
MachineParamsGeneral g = (MachineParamsGeneral)p;
float paramExample = p.paramExample;
}
You need to consider if this solution is "handy" enough for your scale.
A second solution:
public override void Setup(params object[] p ..)
{
// you need to know the arrangement of values inside the object array
float x = (float)p[0]; // not strictly speaking type-safe
}