[c# 20问] 1. 何时使用class与struct

POINTS

struct为可以包含数据和函数的值类型

struct为值类型所以不需要堆(heap)而是在栈(stack)上分配空间

struct将数据直接存在struct中,而class只存引用类型的指针

struct适用于小的数据结构

struct会影响性能

struct可以使用new操作可以调用构造器,但是不会在heap上分配内存

struct的构造器只返回struct的值本身(通常分配在stack上)

使用class时,多个变量可以引用同一个对象

使用sturct每个变量都保存自己的数据拷贝,不会相互影响

struct不支持继承,sturct继承自object类型

DEMO
    class Program
    {
        class PointClass
        {
            public int x;
            public int y;
            public PointClass(int x, int y)
            {
                this.x = x;
                this.y = y;
            }
        }
        struct PointStruct
        {
            public int x;
            public int y;
            public PointStruct(int x, int y)
            {
                this.x = x;
                this.y = y;
            }
        }
        static void Main(string[] args)
        {
            PointStruct pointStruct = new PointStruct(10, 10);
            Console.WriteLine("Initial struct values are {0},{1}", pointStruct.x, pointStruct.y);
            ModifyStructPoint(pointStruct);
            Console.WriteLine("After ModifyStructPoint, struct values are {0},{1}", pointStruct.x, pointStruct.y);

            Console.WriteLine();
            PointClass pointClass = new PointClass(10, 10);
            Console.WriteLine("Initial Class values are {0},{1}", pointClass.x, pointClass.y);
            ModifyClassPoint(pointClass);
            Console.WriteLine("After ModifyClassPoint, class values are {0},{1}", pointClass.x, pointClass.y);
            Console.ReadLine();
        }

        private static void ModifyStructPoint(PointStruct pointStruct)
        {
            pointStruct.x = 20;
            pointStruct.y = 20;
            Console.WriteLine("Modified Valuesare {0},{1}", pointStruct.x, pointStruct.y);

        }

        private static void ModifyClassPoint(PointClass pointClass)
        {
            pointClass.x = 20;
            pointClass.y = 20;
            Console.WriteLine("Modified Valuesare {0},{1}", pointClass.x, pointClass.y);
        }
    }

[c# 20问] 1. 何时使用class与struct,布布扣,bubuko.com

时间: 2024-08-17 14:24:23

[c# 20问] 1. 何时使用class与struct的相关文章

[c# 20问] 3.String和string的区别

POINTS string类型为继承自object的sealed类. string类实例用来存储Unicode字符串. string关键字是System.String类的别名,因此既可以定义string name="Fred",也可以String name="Fred" 同样以也可以使用string.Concat()或String.Concat() 推荐定义变量名使用string,调用方法和引用使用String类 DEMO private static void S

[c# 20问] 2.如何转换XML文件

添加System.Xml引用 使用XmlReader转换字符串 DEMO #region Parse Xml private static void ParseXml(string xmlString) { StringBuilder output = new StringBuilder(); using(XmlReader reader= XmlReader.Create(new StringReader(xmlString))) { reader.ReadToFollowing("book&

初创公司20问:问初心、问实力,也问未来

对,创业是一件九死一生的事,这点我们一直很赞同:一家伟大企业的诞生,方向.能力.运气……所有内部和外部因素缺一不可. 一份商业计划书并不足够问清楚本心和前路,你可能需要一张更简单直白的清单,想清楚产品如何做.用户需求如何找.战略如何规划,竞争危机如何应对,以及,“我什么时候可以计划去上市敲钟”. 划掉其中的错误选项,少走弯路避开坑,或许能帮助你更好地理清企业建立和运营过程中的思路和进度,让创业路上的每一步走得稳一些,再稳一些. 这20个问题,就像创业公司的“普鲁斯特问卷”:问初心.问实力,也问未

powershell玩转xml之20问

powershell 传教士 原创文章 2014-01-30,2015-10-16改 允许转载,但必须保留名字和出处,否则追究法律责任 问:xml文件编码情况如何?答:为了更好的支持多字符,xml文件都是utf8或unicode格式了,用bat处理不了了. 问:xml文件最基本的格式如何?答:<?xml version="1.0" encoding="UTF-16"?> <根节点><根节点/>如上所述,必须有,且只有一个根节点.并

Linux Shell脚本面试基本20问

Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务. Q:2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,"/bin/bash"是默认登录shell,是在创建用户时分配的.使用chsh命令可以改变默认的shell.示例如下所示: # chsh <用户名&

Javascript基础学习20问(三)

1.遍历字符串不用加等于 要用数组代替 (性能优化) 子字符串放入数组 join拼接,+" "代替toString.2.字符串三大操作: (1)str.indexOf()只找第一个关键字 只从位置0开始查找 indexOf ("关键字","from").lastIndexOf("关键字","from")[两 种遍历方法index返回结果一样] (2)str.slice(start,end+1) [支持正负参

JDK集合面试20问

1. HashMap的内部实现原理是什么? HashMap内部实现原理是数组+链表,通过散列算法将key值散列到数组中,如果到相同的位置,则通过拉链法解决散列冲突.在JDK8中新增了红黑树结构,当HashMap中的散列冲突链表结构超过8个数据时,会从链表结构转换为红黑树结构. 2. HashMap的key值能否是null,如果能,key=null如何存储以及如何读取的?如果不能,为什么? HashMap的key值可以是null.如果key=null,则会将它放置在数组下标为0的位置. 3. Ha

JAVA集合面试20问

1. HashMap的内部实现原理是什么? HashMap内部实现原理是数组+链表,通过散列算法将key值散列到数组中,如果到相同的位置,则通过拉链法解决散列冲突.在JDK8中新增了红黑树结构,当HashMap中的散列冲突链表结构超过8个数据时,会从链表结构转换为红黑树结构. 2. HashMap的key值能否是null,如果能,key=null如何存储以及如何读取的?如果不能,为什么? HashMap的key值可以是null.如果key=null,则会将它放置在数组下标为0的位置. 3. Ha

[c# 20问] 4.Console应用获取执行路径

一行代码可以搞定了~ static void GetAppPath() { string path = System.Reflection.Assembly.GetExecutingAssembly().Location; Console.WriteLine(System.IO.Path.GetDirectoryName(path); } 关于Asp.net 可以参考https://msdn.microsoft.com/zh-cn/library/ms178116(v=vs.100).aspx