首页 > 代码库 > study Mvc step by step (二) 关于MVC的一些C#特有语法

study Mvc step by step (二) 关于MVC的一些C#特有语法

   在我们即将进入ASP.NET开发大门的时候。我们需要先学习一些C#的特有语法。而且对于传统的webform的开发,我们介绍的这些C#特有语法并不是每个人都熟悉的.本节将介绍一个MVC优良程序员所需要的C#语言特性。

一:c#的基本特性

1.1使用自动实现的属性

c#属性特性让你暴露一个类的数据片段,这些数据以及如何设置和接收数据采取了一种松耦合的方式。就是说并不是直接和我们类中的字段相关联,而是通过一个对外的接口。我们首先看一下下面的这个叫做   "product"  类  类里面我们只有一个字段

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 河南云和数据{   public  class Product    {        private string name;        public string Name        {            get { return name; }            set { name = value; }        }    }}

名称为"Name"的属性。get代码块(成为getter)中的语句在读取该属性值时执行,而set代码块(成为 setter)中的语句则对这个属性赋值时执行(特殊变量value表示要赋予的值)。属性是由其他类来使用的,就好像它是一个字段一样,总而言之。在上述类中,name是字段。而Name是属性。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using 河南云和数据;namespace CW{    class Program    {        static void Main(string[] args)        {            Product MyProduct = new Product();            MyProduct.Name = "河南云和数据Rocky Ren";            string procductname = MyProduct.Name;            Console.WriteLine("Product name is {0}",procductname);            Console.ReadKey();        }    }}
通过属性赋值取值

你可以看出,属性值的读取和设置,就像对一个规则的字段进行读取操作一样,使用属性就要比使用字段好很多,因为你可以修改get和set块中的语句,而不需要修改依赖于这个属性的整个类。但是,当一个类中有很多属性时,事情就变得枯燥了,所有的getter和setter都要做同样的事情--填充字段。于是我们又要做一些冗长的事情。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 河南云和数据{   public  class Product    {        private int id;        public int Id        {            get { return id; }            set { id = value; }        }        private string name;        public string Name        {            get { return name; }            set { name = value; }        }        private string deacription;        public string Deacription        {            get { return deacription; }            set { deacription = value; }        }        private decimal price;        public decimal Price        {            get { return price; }            set { price = value; }        }          }}

这里需要说明一点的是我们可以在字段中(ctrl+r+e)快速封装这些字段。

我们希望属性具有灵活性,但此刻又不需要自定义的getter和setter,解决方案是一种自动实现的属性,也成为”自动属性“他不需要getter和setter

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 河南云和数据{   public  class Product    {       public int Id { set; get; }       public string Name { set; get; }       public string Description { set; get; }       public decimal Price { set; get; }       public string Category { set; get; }          }}

在使用自动属性的时候,有两个关键点要注意。第一是不定义getter和setter的体,第二是不定义由该属性返回的字体。这两者都由C#编译器在这个类被建立时自动完成.使用自动属性与使用规则没什么不同,形成便于代码阅读的代码,并且仍然保持了属性的灵活性,如果需要改变一个属性实现的方式,还可以返回规则属性的格式。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 河南云和数据{   public  class Product    {       private int id;       public int Id { set; get; }       private string name;       public string Name { set; get; }       private string description;       public string Description { set; get; }       private string price;       public decimal Price { set; get; }       public string Category { set; get; }          }}

 使用对象和集合初始化器