我有以下代码
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)
测试失败,不应该通过引用传递允许对象引用更改?
在测试中,您可以更改entity指向的对象,但是您正在比较对象c指向的对象.
请记住,引用是在赋值时复制的,因此您可以创建一个新引用Container,让它c成为对该对象的引用.然后通过分配c来复制该引用entity.现在,这两个entity并c指向同一个对象.你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)
应该肯定的.