2

私は以下のような1つのインターフェースを持っています

public interface I1 
{
public int add(int a , int b);

public int subtract (int a, int b);

}

public class Myclass : I1
{
//here I can access both the methods of interface I1
//add and subtract but i want to expose only add not subtract method
//How can I achieve this? 

}

特定のメソッドのみを公開し、他のメソッドを防ぐにはどうすればよいですか。

4

4 に答える 4

3

この種の要件については、インターフェイスではなく抽象クラスを選択します。これは、インターフェイスではすべてのメソッドがデフォルトでパブリックであるためです。これは、抽象クラスとインターフェイスの違いの 1 つです。

インターフェイスでは、private や public などの修飾子を配置することはできません。デフォルトでは、すべてのメソッドが public です。

于 2013-02-21T06:51:54.047 に答える
2

明示的な実装によってメソッドを非表示にすることができます。それは悪い考えだと思います。代わりにインターフェースを2つに分割する必要がありますが、それは可能です。

public class MyClass {
    public int I1.subtract(int a, int b) {
        throw new NotImplementedException();
    }
}

このように実行すると、減算はI1としてキャストされた場合にのみ表示objectれます

于 2013-02-21T07:06:33.833 に答える
1

なぜそのような振る舞いが必要なのかわからない。MyClassオブジェクトでメソッドの1つを使用できるようにするだけの場合は、その特定のメソッドに明示的なインターフェイス実装を使用できます。

public class Myclass : I1
    {
        public int add(int a, int b)
        {
            return 1;
        }

        public int I1.subtract(int a, int b)
        {
            return 2;
        }
    }

この場合、MyClassのオブジェクトを作成するときは、addメソッドのみがあり、subtractはありません。減算にアクセスするには、I1の参照タイプを使用する必要があります

于 2013-02-21T07:05:54.090 に答える
1

インターフェースの概念はあなたと言っているので、if you implement an interface you need to implement all the methods私はそれができないと思い

ます. http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginnersをよりよく理解するためのリンクを次に示します。 http://www.codeproject.comと の違いを示すリンクを次に示します。 /Articles/11155/Abstract-Class-vs-Interfaceinterfacepublic
public
Interfaces

Interfaceabstract class

于 2013-02-21T06:52:23.577 に答える