C#学习笔记之C#结构

发布时间:2020-06-23编辑:脚本学堂
本文介绍下,有关C#结构的相关知识,有需要的朋友,参考下吧。

1,类保存在堆中,这种方式可以保证出具的数据在生存周期上的灵活性,性能虽然有一些损失,但由于托管堆的优化,损失是比较小的。
但有时仅需要一个比较小的数据结构,这时可以考虑使用结构
例如:
 

复制代码 代码示例:
class windowForm
{
   public int Left;
   public int Right;   
}

这样一类,只有两个存储项,只需要处理这两个变量。那么可以这样定义为结构
 

复制代码 代码示例:

struct windowForm
{
        public int Left;
        public int Right;

        windowForm(int left, int right)
        {
            this.Left = left;
            this.Right = right;
        }

        public void set()
        {
            Console.WriteLine("Left:" + Left + " Right:" + Right);
        }
    }
 

这样具有构造函数的结构就可以免去定义在队中的麻烦和性能问题。
结构也可以定义属性等。

2,结构是值类型,存储在堆栈中或内联
如下: 两次Set方法处理的结构一样,并不能改变Left的值。
 

复制代码 代码示例:

class Program
{
        static void Main(string[] args)
        {
            windowForm win = new windowForm();
            win.set();
            Change(win);
            win.set();
            Console.Read();
        }

        static void Change(windowForm win)
        {
            win.Left = 1;
        }
    }

3,结构不能继承
4,结构的构造函数是由编译器提供的一个无参数构造函数,自己不能定义新的用来替换。
但是可以定义带参数的构造函数,
注意:自己定义的构造函数中,要初始化结构中所有字段。
 

复制代码 代码示例:
struct Customer 

        public Customer(string _id, string _name) 
        { 
            //构造函数中首先初始化机构中的字段 
            id = ""; 
            name = ""; 
     
            this.id = _id; 
            this.name = _name; 
        } 
     
        private string id; 
     
        public string ID 
        { 
            get { return id; } 
            set { id = value; } 
        } 
        private string name; 
     
        public string NAME 
        { 
            get { return name; } 
            set { name = value; } 
        } 
    } 

5,结构主要用于较小的数据结构,过大会有性能损失。
6,结构在作为参数传递时用要用ref 关键字,否则每次都复制新的内容引起不必要的性能消耗。
7,一个结构赋值给另一个结构的时候,由于结构是非引用型所以每次都会进行全部复制,而类只是复制引用。
8,结构总是派生于System.ValueType,虽然不支持继承,但是可以派生于任意多个接口。

就是这些了,C#学习笔记之C#结构,希望对大家有所帮助。