python初学者代码示例_C#很简单而又很经典的一句代码实例|python基础教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/

一.知识点

2019728114609214.png?2019628114616

二.问题

如果以上四个问题,你很自信,那么以下,您就不要看了,因为我想说的东西真的很简单。

如果你开始怀疑自己,可以继续向下看。你自己到底真的理解吗???

再看下面这段代码有没有问题?

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

class Program

{

static void Main(string[] args)

{

Transform t =new Transform();

t.v.x = 1;

t.ShowV();

Console.Read();

}

}

struct Vector

{

public float x;

public float y;

public float z;

}

class Transform

{

public Vector v {get;set; }

public void ShowV()

{

Console.WriteLine(v.x+"..."+v.y+"..."+v.z);

}

}

如果你觉得没有问题,那么你需要看看。这时候会编译报错,为啥,怎么回事。

第6行编译报错:

2019728114652972.png?2019628114659

三.分析

如果你非常清楚属性的本质的话,那么上述代码可以进行转换,将属性转换为普通方法。(属性的本质就是方法嘛)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

class Program

{

static void Main(string[] args)

{

Transform t =new Transform();

t.GetVector().x = 1;

t.ShowV();

Console.Read();

}

}

struct Vector

{

public float x;

public float y;

public float z;

}

class Transform

{

public Vector v;

//set

public void SetVector(Vector v)

{

this.v = v;

}

//get

public Vector GetVector()

{

return v;

}

public void ShowV()

{

Console.WriteLine(v.x +"..." + v.y +"..." + v.z);

}

}

果然上述的改写只是将属性的写法转为本质写法-写成两个普通的方法。结果还是报一样的编译错误。

2019728114733476.png?2019628114740,编译报错提示还是一样的CS1612

再修改一下

?

1

2

3

4

5

6

Transform t =new Transform();

// t.GetVector().x = 10; 这边编译报错

Vector v2 = t.GetVector();

v2.x = 10;

t.ShowV();

Console.Read();

编译打印结构是 0..0..0。

压根就没变,当然没有变啊,因为v2是副本,你更改的只是副本,并没有改变t中的v,同理,通过t.GetVector()也是一个副本,没有意义。所以C#语法在对于这种情况,帮我们做了一个处理,如果写了这样的代码,直接给出编译报错。C#还是很智能的。就是如果我们错误的进行一个无意义的操作,会直接给出提示。这里给C#语法赞一个。

四.杂谈

这一段代码虽然好像很简单,但是真的藏的很深,楼主工作三年。记得曾经有一次去网易二面,被一个大佬问到这个问题,懵逼了,就乱猜吧,一开始说,那个枚举值中的x只是get,没有set。然后大佬提示我不是的,然后我才误打误撞,恍然大悟,是因为枚举值传递是副本传递,再进行赋值操作没有意义。现在想想,能出这个问题的大佬,真的很强,一道很简单的问题,但是考察的东西真的很多很多。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值