1

これが私の簡単なシナリオです。インターフェイスを実装したクラス (BLL クラス) があります。私がやりたいことは、プレザンテーション層の中で、ユーザーがインターフェイスだけに到達し、クラス関数に直接アクセスするのではなく、このインターフェイスとクラスをやり取りすることです。とにかくそれを行うことはありますか?

私のBLLクラスはインターフェースを実装しました:

    public interface IOfis
    {

        bool Add(Ofis ofs);
        bool Update(Ofis ofs);


    }

    public class BLL_Ofis:IOfis
    {
        public bool Update(Ofis ofs)
        {
            DAL_Ofis ofs_dal = new DAL_Ofis();
            try
            {
                return ofs_dal.Update(ofs);
            }
            catch (Exception)
            {

                throw;
            }
            finally { ofs_dal = null; }
        }

      public bool Add(Ofis ofs_obj)
        {
            DAL_Ofis ofs_dal = new DAL_Ofis();
            try
            {
                return ofs_dal.Add(ofs_obj);
            }
            catch (Exception)
            {

                throw;
            }
            finally { ofs_dal = null; }
        }
}

presantatoin レイヤー内では、次のように使用します。

IOfis bll_ofis = new BLL_Ofis();
bll_ofis.Update();

しかし、この状況では、次のように直接クラスに到達することもできます:

 BLL_Ofis bll_ofis = new BLL_Ofis();
 bll_ofis.Update();

私はそれを望んでいません。インターフェイス内で宣言されたメソッドのみに到達したい。

4

2 に答える 2

2

なぜそれが必要なのかわかりませんが、「解決策」はpublicメソッドを明示的なインターフェース実装に変更することかもしれません。これを行うには、アクセス修飾子 (ここではpublic) を削除IOfis.し、メソッドの名前の前に追加します。このような:

public class BLL_Ofis : IOfis
{
    bool IOfis.Update(Ofis ofs)
    {
        ...
    }

    ...
}

明示的なインターフェイスの実装は、変数のコンパイル時の型がインターフェイスの型である場合にのみ呼び出すことができます。

于 2013-10-26T09:22:18.893 に答える
0

Addクラスにもメソッドを実装する必要があります。可視性については、クラス宣言から削除publicします。これにより、同じアセンブリに存在するコードに対してのみ可視になります。

于 2013-10-26T08:09:46.683 に答える