第一章 C#语言进阶

学习笔记

一 自动属性

1.属性访问器中不需要任何其他逻辑时,自动属性会使属性声明更加简明,但是自动属性无法实现业务需求。

public class  Person
 {
     public int Id { get;private set; }   
       public string Name { get; set; }    
        public string Address { get; set; }   
          private int _age;     
          public int Age     {        
           get{ return _age; }       
             set         {            
              if(value >= 0 && value <= 120)       
                    {             
                        _age= value;           
                          }           
                  else            
                      {    _age= 0;       
                         }         
                   }     
            }    
                public Person(int id)     {       
                  this.Id = id;     }
                  }

在自动属性中,通过在 get 或者 set 前加“private”关键字,id是创建只读属性。

2.属性封装

class Person
 {     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 _address;   
        public string Address    
         {    
        get{ return _address; }        
        set{ _address = value; }
           }
    }

3.属性的快捷方式

1).自动属性:prop+2Tap
2).属性封装 propfull+2Tap

二 对象和集合初始化器

1.对象初始化器

   static void Main(string[] args)
        {
          Bookbook = new Book() { Id = 1, Title = "C#的高级指南", Price =120 };
           Console.WriteLine("编号是:"+book.Id+"标题是:" +book.Title+"单价是:"+book.Price);
            }

对象初始化器结合有参构造函数,为对象的属性赋初始值(对象初始化器结和构造函数结合使用,先执行构造函数):

   Person person = new Person(1) { Name ="张大伟", Age = 45, Address = "北京海淀区"};

2.集合初始化器

List<Book> books = newList<Book>();

Book book1 = new Book() { Id = 1, Title ="C#的高级指南", Price = 120 };//使用对象初始化器

Book book2 = new Book() { Id = 2, Title ="ASP.NET的基础", Price = 43 };

Book book3 = new Book() { Id = 3, Title ="ASP.NET MVC", Price = 145 };

 books.Add(book1);

 books.Add(book2);

 books.Add(book3);

foreach (Book eachBook in books)

{

    Console.WriteLine("编号是:" +eachBook.Id + "标题是:" + eachBook.Title + "单价是:" +

    eachBook.Price);

}

集合和对象初始化器结合使用:

List<Book> books = newList<Book>()

{

     newBook() { Id = 1, Title = "C#的高级指南", Price = 120 },//使用对象初始化器

     newBook() { Id = 2, Title = "ASP.NET的基础", Price = 43},

     newBook() { Id = 3, Title = "ASP.NET MVC", Price = 145 }

}; //使用集合初始化器

foreach (Book eachBook in books)

{

 //代码省略

}

三 .NET 的特殊数据类型

  1. 隐式类型
  2. 匿名类型
  3. 可空类型

隐式类型
主要用于:
声明局部类型变量
for 初始化语句
foreach 初始化语句
using 语句

匿名类型
语法
new {属性名 1=属性值 1,……属性名 n=属性值 n}

匿名类型中的属性赋值是一次性的,即匿名对象的属性是只读的。
例子:var student = new { Name="刘晓华",Age=22,Gender="女"};

可空类型

语法

System.Nullable<类型> 变量名

类型? 变量名

如果没有给属性赋予初始值,那么系统将根据属性的数据类型给予默认值。
string 是引用类型,对应的默认值是 null.
int是值类型,对应的默认值是 0;

System.Nullable<int> num = null;

Nullable<bool> flag = null;

或:

int? num = null;

bool? flag = null;

使用可空类型的以下属性解决问题。

(1)HasValue:属于 bool 类型,当变量包含非空值时,它被设置为 true。

(2)Value:类型与其对应的值类型相同,如果 HasValue 为 true,则说明 Value 包含有意义的值。

int? num = null;

int num2 = num ?? 0;

“??”运算符会首先判断左边的操作数“num”是否为 null,如果为 null,则返回“??”右边给出的值,否则返回左边的操作数。

四 可选参数和命名参数

1.可选参数

语法
[修饰符] 返回类型 方法名(必选参数1,…必须参数n,可选参数1=值,…可选参数n=值)

static void BookPage(string category,stringorder="Price",int pageIndex=1,int
pageSize=10)
 {
     Console.WriteLine("查看分类为{0}的图书,按{1}排序,页码是第{2}页,每页显示{3}条记录
    ",category,order,pageIndex,pageSize);
 }
在主函数中调用该方法:
BookPage("ASP.NET");//使用全部默认参数
BookPage("ASP.NET","Click");//使用2个默认参数

2.命名参数

指定参数的名字类进行参数赋值,可以忽略参数的定义顺序。
优势:不考虑传递参数时的顺序,而且能明显看出每个参数值对应的参数,使代码更具可读性。

使用命名参数来调用方法的语法如下。
语法
方法名(参数 1 名:参数 1 值…参数 n 名:参数 n 值)

五 扩展方法

扩展方法赋予了程序可在现有类下扩展类的功能,而且不修改原本的类的程序代码

扩展方法的格式要求。
(1)必须是静态方法,且方法名不可以和现有的方法名冲突。
(2)扩展方法的第一个参数为要扩展的类型,必须附加一个 this 关键字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值