【发布时间】:2012-05-01 01:01:07
【问题描述】:
我写了一个结构和函数,我尝试通过引用传递结构(即结构值可以在函数内部修改)。
enum RoomType { Economy, Buisness, Executive, Deluxe };
struct HotelRoom
{
public int Number;
public bool Taken;
public RoomType Category;
public void Print()
{
String status = Taken ? "Occupied" : "available";
Console.WriteLine("Room {0} is of {1} class and is currently {2}",
Number, Category, status);
}
}
现在通过引用传递这个结构,我找到了两种方法。
//Using Pointer
private unsafe static void Reserve(HotelRoom* room)
{
if (room->Taken)
Console.WriteLine("Cannot reserve room {0}", room->Number);
else
room->Taken = true;
}
//Using ref keyword.
private static void Reserve(ref HotelRoom room)
{
if (room.Taken)
Console.WriteLine("Cannot reserve room {0}", room.Number);
else
room.Taken = true;
}
有什么不同吗?一般来说,什么时候应该使用指针,什么时候应该使用 ref 关键字?
【问题讨论】:
-
可变结构是邪恶的。您应该使用一个类和一个普通参数。
-
带指针的
unsafe关键字需要告诉你你的问题是什么? -
听起来你在用 C++ 术语思考。别。 C# 不是 C++。
-
@SLaks jsut 试图利用 .Net 的所有优化选项,我已经用 C++ 编码超过 10 年,所以可能会有一些效果。
-
这不是优化;这实际上是一种悲观。固定是众所周知的impair GC performance。
标签: .net pointers struct unsafe ref