激励自己有时间多看看.!!


C#基础共分为七个部分:

  一: 面向对象

二: 值类型, 引用类型, 字符串操作

  三: 集合文件操作

  四: 正则表达式

  五: XML操作

  六: 委托, 事件

  七: 反射

1, 面向对象:

  面向对象的三大特性: 封装, 继承, 多态

2, 什么是类? 什么是对象? 类和对象的区别?

  类: 类似模子, 确定对象将会拥有的特征(属性) 和行为 (方法)

  对象是一个你能够看得到, 摸得着的具体实现-- 万物皆对象.

    --类是模具, 创建对象的模具, 抽象的

       .类是一组数据类型, 用户自定义的数据类型.

     .类组成: 字段, 属性, 方法, 构造函数.

    --对象是具体的, 是类的具体实例. 对象是具有属性(特征)和方法(行为)

    --类中包含了数据(用字段标示)与行为(用方法(函数, 功能)标示, 方法为一块具有名称的代码)

3, 知识点总结

封装继承多态

一、封装:

  封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。

 封装的意义:
  封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。

  封装提供了一个有效的途径来保护数据不被意外的破坏。相比我们将数据(用域来实现)在程序中定义为公用的(public)我们将它们(fields)定义为私有的(privat)在很多方面会更好。私有的数据可以用两种方式来间接的控制。第一种方法,我们使用传统的存、取方法。第二种方法我们用属性(property)。

  使用属性不仅可以控制存取数据的合法性,同时也提供了“读写”、“只读”、“只写”灵活的操作方法。

访问修饰符:

二、继承:

  继承主要实现重用代码,节省开发时间。

1、C#中的继承符合下列规则:

    1. 继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。
    2. 派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员的定义。
    3. 构造函数和析构函数不能被继承。除此之外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
    4. 派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。
    5. 类可以定义虚文法、虚属性以及虚索引指示器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。

  2、new关键字

   如果父类中声明了一个没有friend修饰的protected或public方法,子类中也声明了同名的方法。则用new可以隐藏父类中的方法。(不建议使用)

  3、base关键字

   base 关键字用于从派生类中访问基类的成员:

    1. 调用基类上已被其他方法重写的方法。
    2. 指定创建派生类实例时应调用的基类构造函数。

 三、多态

  1、多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

  编译时的多态性:

  编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

  运行时的多态性:

  运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。

  编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

  2、实现多态:

    1. 接口多态性。
    2. 继承多态性。
    3. 通过抽象类实现的多态性。

  3、override关键字:

   重写父类中的virtual修饰的方法,实现多态。

五个访问修饰符

  Private:只有类本身能存取.
  Protected:类和派生类可以存取.
  Internal:只有同一个项目中的类可以存取.
  Protected Internal:是Protected和Internal的结合. 
  Public:完全存取.

  

  1. C# 方法默认访问级别 : private
  2. C# 类默认访问级别 : internal
  3. 接口成员访问修饰符默认为public,且不能显示使用访问修饰符。
  4. 类(class)

    构造函数默认为public访问修饰符。

    析构函数不能显示使用访问修饰符且默认为private访问修饰符。 
      析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

  5. 类的成员默认访问修饰符为private;

  6. 枚举(enum)

    枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。

  7. 结构(struct)

    结构成员默认为private修饰符。

    结构成员无法声明为protected成员,因为结构不支持继承。

  8. 嵌套类型

    嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致。

字段和属性及索引器

1、属性
  所谓属性其实就是特殊的类成员,它实现了对私有类域的受控访问。在C#语言中有两种属性方法,其一是get,通过它可以返回私有域的值,其二是set,通过它就可以设置私有域的值。比如说,以下面的代码为例,创建学生姓名属性,控制对name字段的受控访问:

 using System;

 public class Student
{
private string name;
/// <summary>
/// 定义学生的姓名属性
/// </summary>
public string Name
{
get { return name; }
set { name = value; }
}
} class Program
{
static void Main(string[] args)
{
Student student = new Student();
student.Name = "Jeff Wong";
Console.WriteLine(student.Name);
Console.Read();
}
}

2、索引器
简单说来,所谓索引器就是一类特殊的属性,通过它们你就可以像引用数组一样引用自己的类。显然,这一功能在创建集合类的场合特别有用,而在其他某些情况下,比如处理大型文件或者抽象某些有限资源等,能让类具有类似数组的行为当然也是非常有用的。比如,上例中,我们假设一个班级有若干个学生,构建索引器就可以很方便地调用:

 using System.Collections.Generic;

 public class Student
{
public List<Student> listStudents = new List<Student>(); /// <summary>
/// 构建索引器
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public Student this[int i]
{
get { return listStudents[i]; }
set { listStudents[i] = value; }
} private string name;
/// <summary>
/// 属性
/// </summary>
public string Name
{
get { return name; }
set { name = value; }
}
public Student(string name)
{
this.name = name;
}
public Student()
{
this.listStudents.Add(new Student("jeff wong"));
this.listStudents.Add(new Student("jeffery zhao"));
this.listStudents.Add(new Student("terry lee"));
this.listStudents.Add(new Student("dudu"));
}
} class Program
{
static void Main(string[] args)
{
Student student = new Student();
int num = student.listStudents.Count;
Console.WriteLine("All the students:");
for (int i = ; i < num; i++)
{
Console.WriteLine(student[i].Name); //通过索引器,取所有学生名
} //设置索引器的值
student[].Name = "jeff";
Console.WriteLine("After modified,all the students:");
for (int i = ; i < num; i++)
{
Console.WriteLine(student[i].Name);
} Console.Read();
}
}

上面代码中,我们看到索引器的访问器带一个参数(参数为整数),其实可以构建多个参数的索引器。还以上述代码为例,我们要根据学生学号和姓名得到学生的考试总分,修改后代码如下:

 using System;
using System.Collections.Generic; public class Student
{
public List<Student> listStudents = new List<Student>(); public Student this[int i,string name]
{
get
{
foreach (Student stu in listStudents.ToArray())
{
if (stu.sid == i && stu.name == name) //按照学号和姓名取出学生
{
return stu;
}
}
return null;
}
set { listStudents[i] = value; }
} private int sid; //学号
public int Sid
{
get { return sid; }
set { sid = value; }
}
private string name;//姓名
public string Name
{
get { return name; }
set { name = value; }
}
private int score; //总分
public int Score
{
get { return score; }
set { score = value; }
}
public Student(int sid, string name, int score)
{
this.sid = sid;
this.name = name;
this.score = score;
}
public Student()
{
this.listStudents.Add(new Student(, "jeff wong", ));
this.listStudents.Add(new Student(,"jeffery zhao",));
this.listStudents.Add(new Student(,"terry lee",));
this.listStudents.Add(new Student(,"dudu",));
}
} class Program
{
static void Main(string[] args)
{
Student student = new Student();
Student stu = student[, "jeff wong"];
Console.WriteLine("student number:" + stu.Sid + ",name:" + stu.Name + ",score:" + stu.Score); Console.Read();
}
}

3、总结:
<1>、

属性的定义:
访问修饰符 返回类型 属性名


      get{语句集合}
      set{语句集合}

索引器的定义:

访问修饰符 返回类型 this[参数类型 参数...]

       get{语句集合}
       set{语句集合}

<2>、

索引器使得对象可按照与数组相似的方法进行索引。
this 关键字用于定义索引器。
get 访问器返回值。set 访问器分配值。
value 关键字用于定义由 set 索引器分配的值。
索引器不必根据整数值进行索引,由你决定如何定义特定的查找机制。
索引器可被重载。
<3>、属性和索引器的主要区别: 
a、类的每一个属性都必须拥有唯一的名称,而类里定义的每一个索引器都必须拥有唯一的签名(signature)或者参数列表(这样就可以实现索引器重载)。 
b、属性可以是static(静态的)而索引器则必须是实例成员。
<4>、索引器重载实例:

 using System.Collections.Generic;

 public class Student
{
public List<Student> listStudents = new List<Student>(); public Student this[int i,string name]
{
get
{
foreach (Student stu in listStudents.ToArray())
{
if (stu.sid == i && stu.name == name) //按照学号和姓名取出学生
{
return stu;
}
}
return null;
}
set { listStudents[i] = value; }
} /// <summary>
/// 索引器重载
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public Student this[int i] //i从0开始
{
get { return listStudents[i]; }
set { listStudents[i] = value; }
} private int sid; //学号
public int Sid
{
get { return sid; }
set { sid = value; }
}
private string name;//姓名
public string Name
{
get { return name; }
set { name = value; }
}
private int score; //总分
public int Score
{
get { return score; }
set { score = value; }
}
public Student(int sid, string name, int score)
{
this.sid = sid;
this.name = name;
this.score = score;
}
public Student()
{
this.listStudents.Add(new Student(, "jeff wong", ));
this.listStudents.Add(new Student(,"jeffery zhao",));
this.listStudents.Add(new Student(,"terry lee",));
this.listStudents.Add(new Student(,"dudu",));
}
} class Program
{
static void Main(string[] args)
{
Student student = new Student();
Student stu = student[, "jeff wong"];
Console.WriteLine("student number:" + stu.Sid + ",name:" + stu.Name + ",score:" + stu.Score); Console.WriteLine("all the students:"); for (int i = ; i < student.listStudents.Count; i++)
{
Console.WriteLine("student number:" + student[i].Sid + ",name:" + student[i].Name + ",score:" + student[i].Score);
} Console.Read();
}
}

里氏替换

一句话总结: 子类可以替换父类的位置,而程序的功能不受影响

更多链接: http://blog.csdn.net/yisuowushinian/article/details/18976629

[C#基础]基础知识一: 面向对象的基本知识.的更多相关文章

  1. Javascript基础回顾 之(三) 面向对象

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  2. 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)

    094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  3. 076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学

    076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学 本文知识点:Java面向对象导学 说明:因为时间紧张,本人 ...

  4. Java07-java语法基础(六)面向对象

    Java07-java语法基础(六)面向对象 一.格式化输出 System.out.printf(“%格式字符”,输出项); 1.格式字符: d --->int.byte.short ld -- ...

  5. C#基础第六天-作业-利用面向对象的思想去实现名片

    1.利用面向对象的思想去实现: (增加,修改,删除,查询,查询全部)需求:根据人名去(删除/查询).指定列:姓名,年龄,性别,爱好,电话. 本系列教程: C#基础总结之八面向对象知识点总结-继承与多态 ...

  6. python基础-基础知识(包括:函数递归等知识)

    老男孩 Python 基础知识练习(三) 1.列举布尔值为 False 的值空,None,0, False, ", [], {}, () 2.写函数:根据范围获取其中 3 和 7 整除的所有 ...

  7. # 095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结

    095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  8. 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)

    093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  9. 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)

    092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

随机推荐

  1. 20.cocoapods的安装和使用

    一.CocoaPods是什么? CocoaPods是一个负责管理iOS项目中第三方开源库的工具.CocoaPods的项目源码在Github上管理.该项目开始于2011年8月12日,在这两年多的时间里, ...

  2. [fortify] 不安全的函数eregi()

    PHP 5.4/5.3弃用函数eregi() memory_limit绕过漏洞 [日期:2012-04-02] 来源:Linux社区  作者:Linux [字体:大 中 小]   发布日期:2012- ...

  3. apache虚拟主机配置HTTPS

    win+apache+php的环境下做虚拟主机的https. 1.https用的是443端口,确定防火墙已经开放443了.2.http.conf要加载以下模块: #这两个是用来存放SSLSession ...

  4. [LeetCode] 452 Minimum Number of Arrows to Burst Balloons

    There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...

  5. Form表单提交数据的几种方式

    一.submit提交 在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮(<input type='submit'>)就可以进行数据的提交, ...

  6. HDU 1010 Tempter of the Bone

    题意:从开始位置走到结束位置,恰好走 t 步 YES 否则 NO 搜索题,由于是恰好走到,所以用到了奇偶剪枝 什么是奇偶剪枝,我也是刚知道 所给步数为 t ,起始位置坐标 (begin_x,begin ...

  7. java嵌套类

    java有四种嵌套类: 静态内部类,成员内部类,局部内部类,匿名内部类 1)静态内部类: (1)类的申明加上staitc关键字.一般用public修饰 (2)只能访问外部类的静态变量和静态方法.不能访 ...

  8. [转]PowerDesigner设置集锦

    powerdesiner的自增长列,以前都是生成sql语句后,再在自增长列中添加Identity(1,1).找了好久,终于打到了方法. 1.如果dbms是MsSql,则选定表后,database-&g ...

  9. 如何运用boolean跳出循环

    用布尔类型跳出循环:1.首先申明一个布尔变量:boolean y =false:申明位置在:方法内,循环外:public void s(){//在此申明布尔变量:for(){}}if(!y){}2,进 ...

  10. Webalizer中文安装解析IP配置

    之前安装的都是英文的,现在替换成中文的,并且新增ip位置解析  参考地址 : http://haolulu.blog.51cto.com/3164472/630894 1.安装webalizer所需的 ...