小编Ava*_*ais的帖子

新关键字不强制隐藏 - OOP C#

我有以下场景:

我想模拟一个界面,以便可以对我的应用程序进行单元测试。我试图不创建一个新的模拟类来实现我的接口,而是创建一个继承原始具体类的新类,并在调用该方法时使用 new 关键字强制新的行为。但由于某种原因,正在调用具体类的方法,而不是我创建的类(作为模拟)

以下代码:

public interface IMyService 
{ 
    Model GetModelData(int id)
}

public class MyService : IMyService
{
    public Model GetModelData(int id)
    { 
       //call to db     
    }
}

public class MyService2 : MyService
{
    public MyService2()
        : base(new MyRepository())
    {    
    }

    public new Model GetModelData(int id)
    { 
        return new Model();
    }
}
Run Code Online (Sandbox Code Playgroud)

注入依赖:

x.ForRequestedType<IMyService>().TheDefaultIsConcreteType<MyService2>();
Run Code Online (Sandbox Code Playgroud)

检索具体类:在调试时,我可以看到 myService 指向 MyService2 类,但该方法在 MyService 类上执行。

_myServie = ObjectFactory.GetInstance<IMyService>();
                Model modelData = _myServie.GetModelData(5);
Run Code Online (Sandbox Code Playgroud)

c# oop inheritance dependency-injection

3
推荐指数
1
解决办法
391
查看次数

如何让一个控件在c#中显示任何派生类的属性?

这可能是一个简单的问题,但我正在努力解决它.

我有两个派生自基类的类

class Base
{
  public int BaseProperty;
  ...
}

class A: Base
{
public int Property_derived;
...
}

Class B: Base
{
public int Property_derived;
...
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个UI表单,它有一个文本框,应该显示派生类的属性(我保证所有派生类的属性的数量和数据类型将是相同的)我做了类似的事情:

textbox1.text = objectA.Property_derived;
Run Code Online (Sandbox Code Playgroud)

如何更改它以使其更通用,如:

textbox1.text = objecttypedoesntmatter.Property_derived;
Run Code Online (Sandbox Code Playgroud)

这样我就可以为任何派生类使用相同的用户界面.任何帮助非常感谢.非常感谢

c# inheritance

0
推荐指数
1
解决办法
64
查看次数

标签 统计

c# ×2

inheritance ×2

dependency-injection ×1

oop ×1