首页 > 代码库 > 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; } }}
使用对象和集合初始化器