考虑以下课程
public class Entity {
public void Foo() { ... }
internal void Bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)
如你所见,它有一个public方法和一个internal方法.现在,我想创建一个接口,允许我在测试中模拟这个类(在这个程序集和其他程序集中).我重写我的代码如下:
public interface IEntity {
void Foo();
}
internal class Entity : IEntity {
public void Foo() { ... }
public void Bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)
但是,这会产生另一个问题.当在同一个程序集中的另一个方法中使用该类时,我再也无法调用Bar:
public class OtherClass {
public void SomeMethod(IEntity entity) {
entity.Bar(); // error!
}
}
Run Code Online (Sandbox Code Playgroud)
像这样重写代码:
public class OtherClass {
public void SomeMethod(IEntity entity) {
(entity as Entity).Bar(); // …Run Code Online (Sandbox Code Playgroud)