1

ソリューションに Web サイトがあり、データ クラス プロジェクトの
データ クラスが Web サイトを参照して
いる データ クラスから Web サイトへメソッドをオーバーライドしたい
コンパイル後のデータ クラスは Web サイトの dll であるため、これが可能だと思います

私のデータクラス:

public partial class forInherit
{
    public virtual int getUserID()
    {
        return 0;
    }
}

public partial class logFunctions : forInherit
{
}

そして私のウェブサイト:

public partial class logFunctions
{
    public override int getUserID()
    {
    }
}

しかし、私のエラーは

オーバーライドする適切なメソッドが見つかりません

4

2 に答える 2

2

部分クラス定義は、部分クラス定義の名前空間が同じであり、それらが同じアセンブリで定義されている場合にのみ、同じクラスを定義します。
あなたの場合、両方の基準が満たされていません。

私があなたの意図を正しく理解しているなら、あなたはあなたのデータクラスの消費者にあなたのデータクラスプロジェクトからgetUserID()のクラスを使用しながらメソッドの振る舞いを変更する可能性を与えたいと思います。logFunctions

これはいくつかの方法で実現できます。非常に簡単な方法の1つは、logFunctionsが呼び出されたときに呼び出されるデリゲートを指定することgetUserID()です。もう1つの可能性は、に渡されるインターフェイスを導入することですlogFunctions

最初のオプションの例:

データプロジェクトの場合:

public class forInherit
{
    public virtual int getUserID()
    {
        return 0;
    }
}

public class logFunctions : forInherit
{
    public Func<int> GetUserIDDelegate { get; set; }

    public override int getUserID()
    {
        if(GetUserIDDelegate == null)
            return 0;
        return GetUserIDDelegate();
    }
}

Webプロジェクトの場合:

logFunctionsInstance.GetUserIDDelegate = () => { return 1; };
于 2012-04-19T10:21:33.197 に答える
0

logFunctionWeb サイトのクラスは、データ クラス プロジェクトのクラスを継承する必要がありますforInherit

両方のlogFunctionクラスはpartial異なるプロジェクトにあり、おそらく名前空間にあります(指定しません)。したがって、両方は名前のみで関連付けられ、コンパイラでは関連付けられません。

于 2012-04-19T10:23:33.517 に答える