精通C#:Chapter5 封装-学习笔记

1、类是由字段数据以及操作这个数据的成员(构造函数、属性、方法、事件等)所构成的自定义类型;其中字段数据用来表示类实例的状态;

2、为了保护状态数据的完整性,最好将数据字段定义为的私有的(或者受保护的),然后通过类型属性对数据提供受控制的访问;

3、一旦定义了自定义的构造函数,则默认构造函数会自动移除;如果想保留默认构造函数,必须在代码中显示的进行定义;

4、this关键字:提供对当前类实例的访问;可以用于构造函数链

eg:

本文实例讲述了C#使用this关键字实现串联构造函数调用方法。分享给大家供大家参考。具体分析如下:

在一个类中如果需要实现多个自定义构造函数,通常做法是在构造函数中实现各自的业务逻辑,如果这些业务逻辑的实现并非截然不同的话,显然不符合oop编程思想,极不利于维护,当然,我们也可以通过将相同的逻辑部分封装成一个方法,但还有一种更为合理简单的方法,下面就通过this关键字来实现串联构造函数做一简单示例。

示例代码如下:

public class Person

{        

        public string personName;

        //定义年龄为可空类型,这样就可以赋予其null值

        public int? personAge;
        //下面前三个构造函数都是去调用参数最多的第四个构造函数,只取它们所需要的部分参数即可

        //这样的做法就是this串联构造函数

        public Person():<span style="color:#ff0000;">this("",0)</span>

        {           

        }
        public Person(string name):this("evan",null)

        {
      
        }
        public Person(int age):this("",20)

        {         

        }
        public Person(string name, int? age)

        {

            this.personName = name;

            //通过 ?? 判断传入的age是否null值

            //如果属于null值,则赋值100

            this.personAge = age ?? 100;

        }
        public void Display()

        {

            Console.WriteLine("Name:{0},Age:{1}\n", personName, personAge);

        }        

}

主函数调用如下:

static void Main(string[] args)

{

        Person per1 = new Person();

        per1.Display();           
        Person per2 = new Person(20);

        per2.Display();           
        Person per3 = new Person("evan");

        per3.Display();           
        Person per4 = new Person("evan", 20);

        per4.Display();
        Console.ReadLine();            

}

这样的做法就是让一个接受参数最多的构造函数做"主构造函数", 且在主构造函数中实现必须的业务逻辑,其余的构造函数只要使用this关键字把传入的参数转发给主构造函数,并且提供必须的其它参数,这样子,我们整个类中需要我们操心的就是那个主构造函数了,其余构造函数基本上可以为空。

注意:如果构造函数链中还有实现各自的逻辑,那么实际上是先执行主构造函数的代码,再执行各自逻辑,使用这种做法,真正的工作都交给了一个构造函数,类定义就会更简洁、更易维护、简化了编程任务。希望本文所述对大家的C#程序设计有所帮助。

5、static关键字(C#重点)

(1)工具类:工具类是不维护任何对象级别的状态且并非由new关键字创建的类,工具类会以类级别成员公开所有功能;只包含静态功能的类或结构称为工具类。

(2)static关键字可用于:类的数据(即字段)、类的属性、类的方法、构造函数、整个类级别;

(3)静态数据:类的静态数据会被同一类的所有对象共享,且静态数据只会被分享一次。如何改变(获取)静态数据呢?

(4)静态方法:静态方法是用来改变或获取静态数据的,静态方法只能静态成员,静态方法引用非静态成员会编译出错;

static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类!

(5)静态构造函数:用来安全地设置静态数据的值,静态函数是特殊的构造函数,非常适用于初始化在编译时未知的静态数据的值;

(6)静态类:静态类只能包含静态成员,在进行工具类设计时,经常设计成静态类。

6、OOP支柱:(1)封装;(2)继承;(3)多态;

(1)封装:

利用属性来封装数据状态(即利用属性来封装字段);

只读属性和只写属性;

静态属性;

自动属性

常量字段;

只读字段(readonly);

静态只读字段(static readonly);

分部类(partial);

(2)继承:

(3)多态:

它表示语言以同一种方式处理相关对象的能力。准确的说,就是基类为所有的派生类定义一个成员集合,这个成员集合称为多态接口。多态接口由任意个虚拟或抽象成员组成。当派生类重写基类定义的成员是,其实就重定义了相应相同请求的不同方式。



























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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值