LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#一句很简单而又很经典的代码

admin
2024年1月22日 12:25 本文热度 417
转自:不三周助
cnblogs.com/u3ddjw/p/11109679.html


一、知识点



二、问题


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


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


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

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行编译报错:



三、分析


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

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);    }}

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



编译报错提示还是一样的CS1612


再修改一下 

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。然后大佬提示我不是的,然后我才误打误撞,恍然大悟,是因为枚举值传递是副本传递,再进行赋值操作没有意义。现在想想,能出这个问题的大佬,真的很强,一道很简单的问题,但是考察的东西真的很多很多。


该文章在 2024/1/22 12:25:22 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved