1

抽象基本クラスがあり、拡張アセンブリでそれを継承しています。そして、ここに私のコードがあります region Contract Assembly

public interface IDummy
{
    int ForAbstractMethod();
    int ForVirtualMethod();
}

public abstract class BaseClass : IDummy
{
    public abstract int ForAbstractMethod();

    public virtual int ForVirtualMethod()
    {
        //Some base functionality
        return 0;
    }
}
#endregion

#region Extension Assembly

public class SomeExtension : BaseClass
{
    public override int ForAbstractMethod()
    {
        //I implement this method here, which is defined abstract in base class and this one works fine.
        return 100;
    }

    public override int ForVirtualMethod()
    {
        //Even though I override the virtual one here, still the one in the base class executes.
        return 1;
    }
}

#endregion


#region Main Program Assembly which references Contract Assembly

public class Program
{
    void Main()
    {
        //... compose catalog and other stuff

        IDummy dummy = someFactory.GetInstanceFromCatalog<IDummy>();//I get an instance
        int a = dummy.ForAbstractMethod();//this works as expected and returns 100
        a = dummy.ForVirtualMethod();//here I expect it to return 1 since I overrode it in child class, but it returns still 0.

        //...other stuff
    }
}

私が認識していない仮想メソッドと抽象メソッドのオーバーライドの間に違いはありますか、またはこれは MEF の特定のケースですか? 助けてくれてありがとう...

4

1 に答える 1