码迷,mamicode.com
首页 > Windows程序 > 详细

C#与OOP知识总结

时间:2015-09-22 01:21:29      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

第一部分:类和对象

1类和对象的定义

  是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。

  对象是具有类类型的变量

2类和对象的关系

  对象是类的实例,类是对象的模板。

3面像对象的优点

1、易维护
  采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高
  在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3、效率高
  在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展
  由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

4创建对象

new运算符在 C# 中,new 关键字可用作运算符、修饰符或约束。 

new 运算符 
用于创建对象和调用构造函数。

例如: 
Class1 o = new Class1(); 
new 运算符还用于调用值类型的默认构造函数。例如: int i = new int(); <=> int i=0; 

new 修饰符 


用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使用 new
修饰符的情况下隐藏成员是允许的,但会生成警告。使用 new
显式隐藏成员会取消此警告,并记录代之以派生版本这一事实。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并使用 new
修饰符修饰该成员。

成员变量和局部变量的区别

  定义位置区别:

    成员变量:定义在类中,方法外。

    局部变量:定义在方法中,或者方法声明上。

  初始化值的区别:

    成员变量:都有默认初始值。

    局部变量:没有默认初始值,要想使用,必须先赋值。

  存储位置区别:

    成员变量:存储在堆中。

    局部变量:存储在栈中。

  生命周期区别

    成员变量:随着对象的创建而存在。随着对象的消失而消失

    局部变量:随着方向的调用而存在,随着方法的调用完毕而消失。更严谨地说局部变量的作用域结束时,即被销毁

值类型和引用类型

(1)值类型。

C#的所有值类型均隐式派生自System.ValueType:

结构体:struct(直接派生于System.ValueType)。

数值类型:

  整型,sbyte(System.SByte的别名),short(System.Int16),int(System.Int32),long(System.Int64),byte(System.Byte),ushort(System.UInt16),uint(System.UInt32),ulong(System.UInt64),char(System.Char)。

  浮点型:float(System.Single),double(System.Double)。

  用于财务计算的高精度decimal型:decimal(System.Decimal)。

  bool型:bool(System.Boolean的别名)。

  用户定义的结构体(派生于System.ValueType)。

  枚举:enum(派生于System.Enum)。

可空类型。

每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

例如:

int i = 0;

等价于:

int i = new int();

使用new运算符时,将调用特定类型的默认构造函数并对变量赋予默认值。在上例中,默认构造函数将值0赋给了i。

所有的值类型都是密封(seal)的,所以无法派生出新的值类型。

值得注意的是,System.ValueType直接派生于System.Object。即System.ValueType本身是一个类类型,而不是值类型。其关键在于ValueType重写了Equals()方法,从而对值类型按照实例的值来比较,而不是引用地址来比较。可以用Type.IsValueType属性来判断一个类型是否为值类型:

TestType testType = new TestType ();

if (testTypetype.GetType().IsValueType)

{

    Console.WriteLine("{0} is value type.", testType.ToString());

}

(2)引用类型

C#有以下一些引用类型:

数组(派生于System.Array)

用户需定义以下类型。

类:class(派生于System.Object);

接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。接口只是表示一种contract约定[contract])。

委托:delegate(派生于System.Delegate)。

object(System.Object的别名);

字符串:string(System.String的别名)。

可以看出:

引用类型与值类型相同的是,结构体也可以实现接口;引用类型可以派生出新的类型,而值类型不能;引用类型可以包含null值,值类型不能;引用类型变量的赋值只复制对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。

 

C#与OOP知识总结

标签:

原文地址:http://www.cnblogs.com/yhsj/p/4827731.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!