我正在尝试定义一个类,其中“我”可以访问所有公共方法,但是当我将实例传递给用户提供的函数时,他们只能访问公共方法的子集。这些方面的东西:
// 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”的编译错误。
我还尝试了使用多个接口实例(IMaster / IUser)的各种方法,但似乎都不起作用,并且尝试使用抽象类(这让我很头疼并且没有产生更好的结果)。
DID 似乎起作用的是在我的代码中定义 MasterClass。然后,我可以在调用 UserFunction 时将其重铸为“(UserClass)”,并且用户将无法看到 Master 方法。但是,考虑到我可能需要(大量?)这样的类,这真的会弄乱我的主程序/文件。我很想知道是否有更好/更好/更容易/(?)的方式来做我想做的事?