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";
    }
}