0

「私」がすべてのパブリック メソッドにアクセスできるクラスを定義しようとしていますが、インスタンスをユーザー提供の関数に渡すと、パブリック メソッドのサブセットにしかアクセスできません。これらの行に沿ったもの:

// usercl.cs
class UserClass {
    public void UserM1();
    public int UserM2(int x);
}

// mastercl.cs
class MasterClass : UserClass {
    public void MasterM3(float y);
    public float MasterM4(int z);
}

// UserCode.cs
...
public void UserFunction(UserClass uc);
...

// Master.cs
MasterClass  mc = new MasterClass();
UserFunction( (UserClass)mc );

しかし、もちろん、上記で実装したように、ユーザーはそれを (MasterClass) に再キャストするだけで、Master メソッドにアクセスできます。UserClass を別の (ユーザー) 名前空間に配置しようとしましたが、UserFunction の呼び出しで「型 X を Y に変換できません」というコンパイル エラーが発生しました。

また、複数の Interface インスタンス (IMaster / IUser) でさまざまなことを試しましたが、どれも機能していないようでした。また、抽象クラスの使用をいくつか試しました (頭が痛くなり、より良い結果が得られませんでした)。

DID が機能しているように見えたのは、コード内で MasterClass を定義することでした。その後、UserFunction を呼び出すときに "(UserClass)" に再キャストでき、ユーザーは Master メソッドを認識できなくなります。ただし、そのようなクラスが (多数?) 必要になる場合があるため、プライマリ プログラム/ファイルが実際に乱雑になります。私がやりたいことを行うためのより良い/より良い/より簡単な/(?)方法があるかどうか知りたいですか?

4

1 に答える 1