"I"がすべてのパブリックメソッドにアクセスできるクラスを定義しようとしていますが、ユーザーが指定した関数にインスタンスを渡すとき、パブリックメソッドのサブセットこれらの線に沿って何か:C#でインスタンスをユーザープロシージャに渡すときメソッドの可視性を制限する
は// 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);
しかし、もちろん、上記実装され、ユーザーは単に(マスタークラス)にそれを改鋳して、マスターメソッドにアクセスすることができます。 UserClassを別の(ユーザー)名前空間に入れようとしましたが、これはUserFunctionへの呼び出しで "Cannnot型XからYへの変換"コンパイルエラーに遭遇しました。
複数のInterfaceインスタンス(IMaster/IUser)でさまざまなことを試みましたが、いずれも動作していないようで、抽象クラスを使用していくつかのスタブを使用しました。
DIDは自分のコード内でMasterClassを定義することで動作するように見えました。 UserFunctionを呼び出すときに「(UserClass)」にリキャストすることができ、ユーザーはMasterメソッドを認識できませんでした。しかし、そのようなクラスを(大量に)必要とするかもしれませんが、これは本当にプライマリプログラム/ファイルを混乱させるでしょう。私は、より良い/より良い/より簡単な方法があるかどうかを知ることに興味があります。
「明示的インタフェース」を参照してください。インタフェースを内部にする。 – user2864740
@ user2864740:どのように役立つか分かりません。具体的なクラスタイプにキャストできるものは、すべてにアクセスできます。 –
@ JohnSkeetインターフェイスを明示的に実装し、内部インターフェイスを内部に保持する場合は使用しないでください。 (私は、分割されたアセンブリがあると仮定しましたが、 '内部'基本クラスのメンバを持つこともできます) – user2864740