.Net中没有Record这一类型,如何使用类似的数据结构传递参数 ( 积分: 9 )

  • 主题发起人 主题发起人 mycwcgr_new
  • 开始时间 开始时间
M

mycwcgr_new

Unregistered / Unconfirmed
GUEST, unregistred user!
.Net中没有Record这一类型,如何使用类似的数据结构传递参数
在C#中,没有类似于Pascal中的Record的数据结构(它可以组织各种数据),如何使用类似的数据结构传递参数?
是使用Struct,还是使用Class 传递参数比较好?

如果在这个Record结构中既含有对象又含有一般类型,用什么好?
例:
Puble cass TmyClass{
...
}
在Pascal中,有这么一个记录
Tmyrecord=Record
TmyClass:a1
a1:integer;
a2:string
end
将这个数据结构作为参数传入某个方法中后,在那个方法中要使用a1这个对象进行一些操作。不需要改变实参

请问在C#中是使用Struct,还是使用Class 传递参数比较好?请说明理由,比如系统资源要求少...等
 
.Net中没有Record这一类型,如何使用类似的数据结构传递参数
在C#中,没有类似于Pascal中的Record的数据结构(它可以组织各种数据),如何使用类似的数据结构传递参数?
是使用Struct,还是使用Class 传递参数比较好?

如果在这个Record结构中既含有对象又含有一般类型,用什么好?
例:
Puble cass TmyClass{
...
}
在Pascal中,有这么一个记录
Tmyrecord=Record
TmyClass:a1
a1:integer;
a2:string
end
将这个数据结构作为参数传入某个方法中后,在那个方法中要使用a1这个对象进行一些操作。不需要改变实参

请问在C#中是使用Struct,还是使用Class 传递参数比较好?请说明理由,比如系统资源要求少...等
 
老兄,谁说C#里没有结构类型。
下面就是一个结构类型。
struct Point
{
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
Java里就没有结构类型。C#里还保留了结构类型.
 
相似:结构可以实现接口,并且可以具有与类相同的成员类型。
不同:结构为值类型而不是引用类型,并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。
 
采用struct結構可以實現您的要求
 
struct适合传递只读、尺寸小的参数。
class适合传递可变,尺寸大的参数。
struct在参数传递时,使用copy的方式,当size太大,效率会比较低
class在参数传递时,是用传递地址(指针)的方式,不管对象的size有多大,总是传递对象地址,速度是一样的。
另外,由于struct使用copy的方式传递参数,会带来一些副作用,即struct的成员在callee中修改了,不会影响caller。所以,最安全的方法,是让struct变为readonly的。你要是观察一下.net类库中的struct就清楚了,几乎都是只读的。
比如:
struct Point
{
public int X;
public int Y;
}
class Outer
{
public Point P;
}
Point x = new Point();
Outer c = new Outer();
c.P = x;
c.P.X ++;
// 此时c.P.X = 1;
而x.X = 0;
这种现象,常常造成逻辑的混乱,不如把struct的所有成员变为只读的。
如果你没看懂,那么我还是建议你总是使用class,这样至少不会出问题。而且一般来说,只有当struct的size小于16字节时,才比class有更高的效率。
 
建议用Class ,现在的机器性能好到你不需要去比较使用 struct还是Class
 
多人接受答案了。
 
后退
顶部