我只是测试一些东西,我想知道使用ref是否有任何好处。 所以在下面的代码中我有两个方法都接受客户的observablecollection,一个没有ref的一个。 两者都完全相同(更新原始列表)。那么使用ref有什么好处?
ObservableCollection<Customer> customers;
public MainWindow()
{
InitializeComponent();
customers = new ObservableCollection<Customer>()
{
new Customer () { Id = 1, Name="Batman"},
new Customer () { Id = 2, Name="Spiderman"},
};
AddCutomer(customers);
AddCutomer(ref customers);
}
public void AddCutomer(ObservableCollection<Customer> customers)
{
customers.Add(new Customer() { Id = 3, Name = "Superman" });
}
public void AddCutomer( ref ObservableCollection<Customer> customers)
{
customers.Add(new Customer() { Id = 3, Name = "Superman" });
}
如果我使用int,那么无论我是否使用关键字ref都无关紧要,它会改变原始值。但是,字符串的行为会有所不同,具体取决于我是否使用ref。
亲切的问候
答案 0 :(得分:1)
在这种背景下:完全没有。 Ref传递对包含对实例的引用的变量的引用,而不是将引用复制到实例。
static void Main()
{
int i = 1;
int j = 2;
Foo(ref i);
Console.WriteLine(i); // Should print 10
Bar(j);
Console.WriteLine(j); // Should print 2
}
static void Foo(ref int value)
{
value = 10;
}
static void Bar(int value)
{
value = 15;
}
Foo
会更改i
的值,但Bar不会更改j
的值。
参考类型的行为完全相同。
ref
对结构最有用。在大多数其他情况下,out
是首选,因为它可以保证值的更改。
答案 1 :(得分:1)
使用ref
作为参考类型,您可以修改引用本身,而不是它所指向的值。
使用您的示例,如果您创建一个新的ObservableCollection并将其分配给customers
函数中的AddCustomer
变量,那么调用函数MainWindow
中的customers变量现在将指向这个新系列。即旧的收藏品将丢失。