C#覆盖不同的子参数(同一父)?
C# Override with different child parameters (Same Parent)?
这是我想要做的事情的一个例子。
public class ParentA {}
public class ChildA : ParentA
{
public string x;
}
public class A
{
public virtual void DoSomething(Parent a)
{
// perform something
}
}
public class B : A
{
public Override void DoSomething(Child a)
{
// perform something slightly different using both strings
a.x = "something";
}
}
但结果我遇到了一个错误“找不到合适的方法来覆盖”。
所以我想从 class A 覆盖 DoSomething 并传递一组不同的子 class 参数。这可能吗?
当您覆盖某些内容时,方法的签名必须相同。
所以在你的情况下,你可以这样做
public class Parent { }
public class Child : Parent
{
public string x;
}
public class A
{
public virtual void DoSomething(Parent a)
{
// perform something
}
}
public class B : A
{
public override void DoSomething(Parent a)
{
if (a is Child child)
{
// perform something slightly different using both strings
child.x = "something";
}
}
}
我不是 100% 确定你想要完成什么,但是泛型可能会帮助你:
public class Parent { }
public class Child : Parent
{
public string x;
}
public class A<T> : Parent where T : Parent
{
public virtual void DoSomething(T a)
{
}
}
public class B : A<Child> // Child could also be Parent here
{
public override void DoSomething(Child a)
{
a.x = "test";
}
}
这是我想要做的事情的一个例子。
public class ParentA {}
public class ChildA : ParentA
{
public string x;
}
public class A
{
public virtual void DoSomething(Parent a)
{
// perform something
}
}
public class B : A
{
public Override void DoSomething(Child a)
{
// perform something slightly different using both strings
a.x = "something";
}
}
但结果我遇到了一个错误“找不到合适的方法来覆盖”。
所以我想从 class A 覆盖 DoSomething 并传递一组不同的子 class 参数。这可能吗?
当您覆盖某些内容时,方法的签名必须相同。
所以在你的情况下,你可以这样做
public class Parent { }
public class Child : Parent
{
public string x;
}
public class A
{
public virtual void DoSomething(Parent a)
{
// perform something
}
}
public class B : A
{
public override void DoSomething(Parent a)
{
if (a is Child child)
{
// perform something slightly different using both strings
child.x = "something";
}
}
}
我不是 100% 确定你想要完成什么,但是泛型可能会帮助你:
public class Parent { }
public class Child : Parent
{
public string x;
}
public class A<T> : Parent where T : Parent
{
public virtual void DoSomething(T a)
{
}
}
public class B : A<Child> // Child could also be Parent here
{
public override void DoSomething(Child a)
{
a.x = "test";
}
}