「私」がすべてのパブリック メソッドにアクセスできるクラスを定義しようとしていますが、インスタンスをユーザー提供の関数に渡すと、パブリック メソッドのサブセットにしかアクセスできません。これらの行に沿ったもの:
// 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 メソッドを認識できなくなります。ただし、そのようなクラスが (多数?) 必要になる場合があるため、プライマリ プログラム/ファイルが実際に乱雑になります。私がやりたいことを行うためのより良い/より良い/より簡単な/(?)方法があるかどうか知りたいですか?