VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2316|回复: 9

C# 类与结构的疑问

[复制链接]

2

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2021-4-25 19:00:02 | 显示全部楼层 |阅读模式
在类中,字段可以赋初值;

class c
{
    int i=123;//可以
}

在结构中,就不可以。

struct s
{
    int i=123;//不可以
}

为什么在结构中就不可以赋初值,这样有什么好处?这样做灵活性不是降低了吗
回复

使用道具 举报

0

主题

110

帖子

63.00

积分

新手上路

Rank: 1

积分
63.00
发表于 2021-4-25 19:15:01 | 显示全部楼层
可以,但要放在构造函数中..

for example:

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}
回复

使用道具 举报

2

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2021-4-25 19:30:01 | 显示全部楼层
结构能做的,类也能做,那结构不是多余了吗?
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2021-4-25 19:45:01 | 显示全部楼层
它们的侧重点不同,各自有自己的长处.
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2021-4-25 20:00:02 | 显示全部楼层
最大的区别在于一个是值类型,一个是引用类型。一个在栈里分配内存,一个在堆里分配内存。C#中引入结构主要是考虑与以前的一些API进行处理时使用,结构存在装箱问题,类不存在。
一句话,它们虽然看起来很象,但的确不一样。
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2021-4-25 20:15:02 | 显示全部楼层
它们的区别:


问题                                       结构                                     类
是值类型还是引用类型?                  值类型                                  引用类型

它们的实例存在于堆栈上还是堆上?        结构的实例为值,存在于堆栈上      类的实例称为对
                                                                      象,存在于堆上

可以声明一个默认构造函数吗?        不可以                                    可以

如果声明自己的构造函数,                   会                                     不会
编译器仍会生成默认构造函数吗?

如果在自己的构造函数中不初始化           不会                                     会
一个字段,编译器会帮你初始化吗?

可以在声明一个实例字段的同时初始化它吗?        不可以                           可以
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2021-4-25 20:30:01 | 显示全部楼层
(问题)                                       (结构        )                        (类)
是值类型还是引用类型?                  值类型                               引用类型

它们的实例存在于堆栈上还是堆上?        结构的实例为值,            类的实例称为对
                                     存在于堆栈上              象,存在于堆上
                 

可以声明一个默认构造函数吗?        不可以                                可以

如果声明自己的构造函数,                   会                                不会
编译器仍会生成默认构造函数吗?

如果在自己的构造函数中不初始化           不会                                 会
一个字段,编译器会帮你初始化吗?

可以在声明一个实例字段的同时初始化它吗?        不可以                      可以
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2021-4-25 20:45:01 | 显示全部楼层
不好意思,如果可以支持表格会更好!
回复

使用道具 举报

2

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2021-4-25 21:00:01 | 显示全部楼层
谢谢各位,记下了慢慢体会^-^
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2021-9-17 17:34:55 | 显示全部楼层
5楼正解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表