接口未通过引用传递

卡塔琳娜

我需要在运行时更改接口的实现。许多类都引用此接口。

这是我的测试用例,它没有按我预期的那样工作。(更改接口的引用似乎并没有在使用它的所有地方都进行更新)

这是示例:

// interface to change at runtime
interface IDiet
{
    void Eat();
}

class CarnivoreDiet : IDiet
{
    public void Eat()
    {
        Debug.WriteLine("Eat chicken");
    }
}

class HerbivoreDiet : IDiet
{
    public void Eat()
    {
        Debug.WriteLine("Eat spinach");
    }
}

class Human : IDiet
{
    private readonly IDiet _diet;
    public Human(IDiet diet)
    {
        _diet = diet;
    }

    public void Eat()
    {
        _diet.Eat();
    }
}

void Main()
{
    IDiet diet = new CarnivoreDiet();
    Human human = new Human(diet);
    human.Eat();
    // outputs "Eat chicken"

    diet = new HerbivoreDiet();
    human.Eat();
    // still outputs "Eat chicken" even if i changed the reference of IDiet interface
}

为什么IDiet接口在Human实例内部不更新

PS:该IDiet接口在许多类中都使用过,因此添加类似的方法SetDiet(IDiet diet)将不是解决方案。

Damien_The_Unbeliever

由于您已经实现了一个外观,为什么不实现第二个外观:

class ChangableDiet : IDiet
{
    private IDiet _diet;
    public ChangableDiet (IDiet diet)
    {
        _diet = diet;
    }

    public Diet Diet { get { return _diet;} set { _diet = value; } }

    public void Eat()
    {
        _diet.Eat();
    }
}

建设这些中的一个,并通过Human构造函数。

void Main()
{
    IDiet diet = new CarnivoreDiet();
    var changable = new ChangableDiet(diet)
    Human human = new Human(changable );
    human.Eat();
    // outputs "Eat chicken"

    changable.Diet = new HerbivoreDiet();
    human.Eat();
    // outputs "Eat spinach"
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

接口未通过引用传递

来自分类Dev

PHP变量会自行更改,尽管未通过引用传递

来自分类Dev

如何通过mainactivity传递接口引用?

来自分类Dev

JavaScript未通过代理传递

来自分类Dev

数据未通过url传递

来自分类Dev

JavaScript未通过代理传递

来自分类Dev

参数未通过部分传递

来自分类Dev

我可以通过引用传递接口参数吗?

来自分类Dev

在foreach上投射的PHP数组未通过引用传递变量

来自分类Dev

tkinter中的值未通过按钮传递

来自分类Dev

剂量值未通过验证正确传递

来自分类Dev

外部PHP数据未通过AJAX传递

来自分类Dev

数据未通过JQuery AJAX请求传递

来自分类Dev

$ _POST变量未通过表单传递

来自分类Dev

字体路径未通过意图传递

来自分类Dev

覆盖方法(如果未通过参数传递)

来自分类Dev

未通过函数调用 JavaScript 传递 ID

来自分类Dev

如果未修改,PHP是否会优化未通过引用显式传递的数组类型的函数参数?

来自分类Dev

通过引用传递(引用此)

来自分类Dev

通过引用传递引用类型

来自分类Dev

通过引用传递的值的引用

来自分类Dev

通过引用设置接口{}参数

来自分类Dev

Java并通过引用传递

来自分类Dev

通过引用传递指针

来自分类Dev

通过引用传递功能

来自分类Dev

通过引用传递功能

来自分类Dev

通过引用传递ArrayList

来自分类Dev

通过引用传递指针

来自分类Dev

通过引用传递对象