通过引用传递不工作

np-*_*ard 2 c#

我有以下代码

public interface IEntity
{
// Properties
    int Id { get; set; }
}

public class Container : IEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Command
{      
    public void ApplyCommand(ref IEntity entity)
    {
        Container c = new Container() { Id = 20 };
        entity = c;
    }
}

[TestFixture]
public class ReferenceTest
{
    [Test] 
    public void Casting_ByRef_Not_ReturningValue()
    {
        Container c= new Container();
        IEntity entity = c;
        new Command().ApplyCommand(ref entity);           
        Assert.AreEqual(c.Id, 20);            
    }
}
Run Code Online (Sandbox Code Playgroud)

测试失败,不应该通过引用传递允许对象引用更改?

Joe*_*oey 8

在测试中,您可以更改entity指向的对象,但是您正在比较对象c指向的对象.

请记住,引用是在赋值时复制的,因此您可以创建一个新引用Container,让它c成为对该对象的引用.然后通过分配c来复制该引用entity.现在,这两个entityc指向同一个对象.你ref entity进入方法,从而改变entity但不接触c.

Container c= new Container();
IEntity entity = c;
new Command().ApplyCommand(ref entity);
Assert.AreEqual(entity.Id, 20);
Run Code Online (Sandbox Code Playgroud)

应该肯定的.