传递到函数中的类型
本文关键字:类型 函数 | 更新日期: 2023-09-27 18:25:25
我有一个简单的应用程序,它有一个抽象类BaseType
,以及两个派生类FirstDerived : BaseType
和SecondDerived : BaseType
。在派生类i中,调用函数base.MakeChange(Item.ID);
来更改嵌入属性Item
的实例的值。它不会改变。正如我所解释的,因为base.MakeChange(Item.ID);
改变的不是FirstDerived
的实例,在函数中它创建了另一个实例。但我认为函数MakeChange
应该在Item
上获得引用,因为它是引用类型。似乎MakeChange
得到了类型值。为什么?我哪里错了?
namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
Data d = new Data();
Console.WriteLine(((FirstDerived)d.Items[0]).Item.ID);
Console.ReadKey();
}
}
public class Item
{
public string ID { get; set; }
}
public abstract class BaseType
{
public void MakeChange(string id)
{
id = "5";
}
}
public class FirstDerived : BaseType
{
public FirstDerived()
{
Item = new Item();
Item.ID = "4";
base.MakeChange(Item.ID);
}
public Item Item { get; set; }
}
public class SecondDerived : BaseType
{
public SecondDerived()
{
Item = new Item();
base.MakeChange(Item.ID);
}
public Item Item { get; set; }
}
public class Data
{
public ObservableCollection <BaseType> Items { get; set; }
public Data()
{
Items = new ObservableCollection<BaseType>();
Items.Add(new FirstDerived());
}
}
}
您正在重置方法内部本地作用域id
的值,而不是传递给方法的属性。
如果你想这样做,你必须让id
通过引用,或者只返回新的值:
public string MakeChange(string id)
{
return "5";
}
public void MakeChangeAsRef(ref string id)
{
id = "5";
}
然后这样称呼它:
Item.ID = this.MakeChange(Item.ID);
或作为ref
:
string id = Item.ID;
this.MakeChangeAsRef(ref id);
Item.ID = id;
另一种选择是通过Item
。
(不要调用base.
,因为它可能有一天会破坏覆盖该方法。this
现在也会做同样的工作)
-
public void MakeChange(项目项)将项目参数作为对象
-
base.MakeChange(Item);
在您的第一个派生和第二个派生中