zoukankan      html  css  js  c++  java
  • C#基础知识 结构与类的区别

    网上看到struct与class之间的区别,都写的很多,当然说的是对的,也很详细。不过我个人不喜欢照本宣科,还是要有自己的理解和认识,方便记忆。

    (前提:对于值类型与引用类型有一定的认识)

    结构最重要的两点:

    •  struct 值类型
    •  struct 不能被继承(所以不能被protected)

    以前总会纠结一个问题,什么时候用Class,什么时候用Struct。(不知道大家有没有同样的困惑)

    值类型:就代表它存储的位置是stack(堆)上,存储在stack上就代表,它传递的不是值所在内存中的指针,代表它传递的是副本,这些最终说明了一个问题,就是在changeValue这个方法里修改它的值之后,在main方法中并没有任何影响。

            static void Main(string[] args)
            {
                PersonClass personClass = new PersonClass();
                personClass.Name = "Class";
                PersonStruct personStruct = new PersonStruct();
                personStruct.Name = "Struct";
                changeValue(personClass, personStruct);
                Console.WriteLine(personClass.Name);
                Console.WriteLine(personStruct.Name);
            }
            public static object changeValue(PersonClass personClass, PersonStruct personStruct)
            {
                personClass.Name = "Class1";
                personStruct.Name = "Struct1";
                return null;
            }

    结果:

    不能被继承:这个很好理解,它不能继随别人,别人也不能继承它。当然它是可以实现接口的。

     结构与类之间相同处很多很多。我们无需记住相同点,只需要记住不同点(类型与继承),自然就知道在什么样的场景可以使用结构。

    Tip:msdn给出的建议,以下几种情况适合使用struct

    • 小于16个字节
    • 偏向于值,是简单数据,而不是偏向于"面向对象"
    • 希望值不可变

    如果大家有什么好的想法,可以留言,我肯定会学习并实践好再拿出来分享。

    非常感谢。

    如果对您有帮助,请点赞!

    非常感谢您的耐心观看,您的关注是我最大的动力! 不积跬步无以至千里,不积小流无以成江海!
  • 相关阅读:
    C#中子线程操作主线程中窗体上控件的方法
    关于VS2010在使用过程中的一些便捷之处
    WCF 开发日志 WCF契约设计
    OEA框架学习:运行时
    OEA框架学习:使用动软代码生成器
    OEA框架学习:多线程
    批处理定时自动更新SVN
    读书笔记:高效经理人的8个思维原则
    C# WinForm 技巧五:WinForm界面生成
    WCF开发日志 OEA里面的WCF设计
  • 原文地址:https://www.cnblogs.com/sheldon-blog/p/8086811.html
Copyright © 2011-2022 走看看