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


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. 1154. Easy sort

    #include<iostream>#include<cmath>#include<iomanip>#include<algorithm>using n ...

  2. 区间型DP

    区间型DP是一类经典的动态规划问题,主要特征是可以先将大区间拆分成小区间求解最后由小区间的解得到大区间的解. 有三道例题 一.石子合并 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆. ...

  3. [转]为什么使用 Redis及其产品定位

    原文链接:http://www.infoq.com/cn/articles/tq-why-choose-redis 传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据 ...

  4. oracle exists

    公司项目中有用到exists,感觉挺有用的,拷贝一些感念的东西. “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T ...

  5. Web Workers

    在 Web Workers 中使用 postMessage 和 onmessage 首先,需要在客户端页面的 JavaScript 代码中 new 一个 Worker 实例出来,参数是需要在另一个线程 ...

  6. ORA-12705问题解决过程

    最近开发C#加ORACLE的程序,就有一台电脑连接的时候报错误 ORA-12705: Cannot access NLS data files or invalid environment speci ...

  7. UIView动画

    UIView动画 一.commitAnimations方式使用UIView动画 1.commitAnimations方式使用UIView动画 [UIView beginAnimations:@&quo ...

  8. Intent组件的传参应用

    Intent是要执行的操作的抽象描述 可以在startActivity.startService等方法中使用 最为常见的用法是在Activity之间传递数据 跳转并传值: Intent intent= ...

  9. 第十章 PageRank——Google的民主表决式网页排名技术

    搜索引擎的结果取决于两组信息:网页的质量信息,这个查询与每个网页的相关性信息.这里,我们介绍前一个. 1.PageRank算法原理 算法的原理很简单,在互联网上,如果一个网页被很多其他网页所链接,说明 ...

  10. GNU Makefile编写

    [Introduction] make 是程序员很好用的工具,如果存在makefile存在,每次更新代码,执行shell命令 shell 就可以执行所有需要编译的文件,make是根据你编写的Makef ...