.net基础总复习(1)

第一天

1.new关键字

(1) 创建对象

(2) 隐藏从父类那里继承过来的成员

2.访问修饰符

public: 公开的,公共的。

private:私有的,只能在当前类的内部访问,类中的成员,

如果不加访问修饰符,默认就是private。

protected:受保护的,可以在当前类的内部访问,也可以在该类的子类中访问。

internal: 在当前项目中都可以访问, internal于public的区别就是一个限制在项目里,另一个不是。

protected internal:能够修饰类的访问修饰符只有两个,internal和public。

3.常用的关键字

this       //当前类对象

base      //父类构造函数

new      //1.创建对象 2.隐藏父类成员

virtual     //标记一个方法是虚方法

abstract   //抽象的

override   //重写

interface   //接口

partial     //不分类

sealed     //密封类

return     //1.在方法中返回要返回的指 2.立即结束本次方法

break      //跳出当前循环

continue   //结束本次循环,回到循环条件进行判断

static      //静态的

struct     //结构

enum     //枚举

const     //常量

Partial部分类

Sealed 密封类

(它可以继承于别人,别人不能继承于它)

  1. 模拟移动硬盘,U盘,MP3等移动设备插到电脑上进行读写数据

/// <summary>

/// 抽象的移动存储设备父类

/// </summary>

public abstract class MobileStorage

{

public abstract void Read();

public abstract void Write();

}

public class MobileDisk : MobileStorage

{

public override void Read()

{

Console.WriteLine("移动硬盘在读取数据");

}

public override void Write()

{

Console.WriteLine("移动硬盘在写入数据");

}

}

public class UDisk : MobileStorage

{

public override void Read()

{

Console.WriteLine("u盘在读取数据");

}

public override void Write()

{

Console.WriteLine("U盘在写入数据");

}

}

public class Mp3 : MobileStorage

{

public void PlayMusic()

{

Console.WriteLine("Mp3可以自己播放音乐");

}

public override void Read()

{

Console.WriteLine("Mp3读取数据");

}

public override void Write()

{

Console.WriteLine("Mp3在写入数据");

}

}

public class Computer

{

public MobileStorage MS

{

get;

set;

}

public void CPURead()

{

this.MS.Read();

}

public void CPUWrite()

{

this.MS.Write();

}

}

static void Main(string[] args)

{

MobileDisk md = new MobileDisk();

Mp3 mo3 = new Mp3();

UDisk u = new UDisk();

Computer CPU = new Computer();

CPU.MS = md;

CPU.CPURead();

CPU.CPUWrite();

Console.ReadKey();

}

虚方法,抽象方法

 

关于虚方法需要注意的几点:

  1. 父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
  2. 虚方法在父类中必须有实现,而且是空实现。(有大括号,没有代码)
  3. 虚方法子类可以重写(override),也可以补充些

关于抽象方法注意的几点:

1. 需要用abstract关键字标记

2. 抽象方法不能有任何方法实现

3. 抽象成员必须包含在抽象类中。

4. 由于抽象成员没有任何实现,所以子类必须将抽象成员重写。

5. 抽象类不能实例化

抽象类的作用,抽象类的作用就是为了让子类继承。

6. 抽象类中可以包括抽象成员,可以包括有具体代码的成员。

7. 还有抽象方法不能用static修饰.

8. class Program

9.     {

10.          static void Main(string[] args)

11.          {

12.          }

13.      }

14.

15.      public abstract class Person

16.      {

17.

18.          private string _name;

19.

20.          public string Name { get => _name; set => _name = value; }

21.

22.

23.          public Person(string name)

24.          {

25.              this.Name = name;

26.          }

27.

28.          public Person()

29.          {

30.

31.          }

32.

33.          public virtual void SayHello()

34.          {

35.

36.          }

37.

38.          public abstract double Test(string name);

39.

40.        //  public abstract void Test();

41.

42.

43.      }

44.

45.      public class Student:Person

46.      {

47.

48.          public override double Test(string name)

49.          {

50.              return 12;

51.          }

52.

53.

54.          public void SayHello()

55.          {

56.

57.          }

58.

59.       }

60.

接口

鸟和飞机都会飞,但是他们不能提取出一个父类来,所以这时候引入了接口 IFlayable

public interface IFlyable

{

void Fly();

}

 

  1. 接口中只能包含方法(属性、事件、索引器也都是方法)
  2. 接口中的成员都不能有任何实现
  3. 接口不能被实例化
  4. 接口中的成员不能有任何访问修饰符(默认为public)
  5. 实现接口的子类必须将接口中的所有成员全部实现
  6. 子类实现接口的方法时不需要任何关键字,直接实现即可。
  7. 接口存在的意义就是为了多态。

 

     四个字形容接口——光说不做

 

*接口可以普通的实现或显式的实现。

显式实现是为了解决接口的重名问题。

面向对象复习结束:

虚方法实例

class Program

{

static void Main(string[] args)

{

//作业:员工类、部门经理类、程序员类

//部门经理也是员工,所以要继承自员工类。员工有上班打卡的方法,用类来模拟

Employee emp = new Programmer();

emp.Daka();

Console.ReadKey();

}

}

public class Employee

{

public virtual void Daka()

{

Console.WriteLine("员工九点打卡");

}

}

public class Manager : Employee

{

public override void Daka()

{

Console.WriteLine("经理十一点打卡");

}

}

public class Programmer : Employee

{

public override void Daka()

{

Console.WriteLine("程序员九点打卡");

}

}

抽象类实例:

class Program

{

static void Main(string[] args)

{

//作业:动物Animal 都有吃Eat和Bark的方法,狗Dog和猫Cat叫的方法不一样

//父类中没有默认的实现锁考虑用抽象方法

Animal a = new Cat();

a.Bark();

a.Eat();

Console.ReadKey();

}

}

public abstract class Animal

{

public abstract void Eat();

public abstract void Bark();

}

public class Cat : Animal

{

public override void Eat()

{

Console.WriteLine("猫咪舔着吃");

}

public override void Bark()

{

Console.WriteLine("猫咪喵喵叫");

}

}

public class Dog : Animal

{

public override void Bark()

{

Console.WriteLine("狗狗汪汪叫");

}

public override void Eat()

{

Console.WriteLine("狗狗咬着吃");

}

}

接口实例:

class Program

{

static void Main(string[] args)

{

//作业:鸟-麻雀,鸵鸟

//企鹅,鹦鹉

//鸟能飞,鸵鸟,企鹅不能。。。你怎么办

IFlyable fly = new MaQue();

fly.Fly();

Console.ReadKey();

}

}

public interface IFlyable

{

void Fly();

}

public class Bird

{

public double Wings

{

get;

set;

}

public void SayHello()

{

Console.WriteLine("我是小鸟");

}

}

public class MaQue : Bird, IFlyable

{

public void Fly()

{

Console.WriteLine("麻雀会飞");

}

}

public class TuoNiao : Bird

{

}

public class QQ : Bird

{

}

public class YingWu : Bird, IFlyable

{

public void Fly()

{

Console.WriteLine("鹦鹉会飞");

}

}

   

 

 

 

 

 字符串复习

 学习.net就是学习它的无数个类库怎么用

 

字符串的不可变性

4.字符串

1)字符串的不可变性

2)字符串可以看作是char类型的只读数组

方法:

IsNullOrEmpty

ToCharArray()

ToLower()

ToUpper()

Equals()

Contains

是否包含

IndexOf

如果没有返回-1

LastIndexOf

找最后一次,没有返回-1

Substring()

从下标为x的位置开始,截取y个

Split()

分割字符串

Join()

Replace()

Trim();

Length();

**集合里没有Length,集合里面是Count**

练习1.接收用户字符串,相反输出

方法1:

str = “abc”;

str.reverse();

方法2:

//课上练习2:接受用户输入的一句英文,将其中的单词以反序输出

string str = “I Love You”

string[] strNew = str.Split(new char[]{‘ ‘},StringSplitOptions.RemoveEmptyEntri)

for()

string test = "程$晓$";

使用:string[] temp = test.Split(new string[] { "$" }, StringSplitOptions.RemoveEmptyEntries);

输出结果:数组长度为2
temp[0]="程" temp[1]="晓";

使用:string[] temp = test.Split(new string[] { "$" },
StringSplitOptions.None);或string[]
temp = test.Split(‘$‘);

  输出结果:数组长度为3 temp[0]="程" temp[1]="晓" temp[2]="";

File

求一下最高最低和平均工资。

高效的StringBuilder

StringBuilder

集合复习

ArrayList

HashTable

List<T>

Dictionary<TKey,TValue>

装箱或者拆箱

装箱:就是将值类型转换为引用类型

拆箱:就是将引用类型转换为值类型

值类型: bool int double char struct enum decimal    //栈

引用类型: string 数组 集合 interface object 自定义类   //堆

ref的作用就是把值传递改成引用传递。

拆箱或装箱的两种类型必须具有继承关系。

(把int转成string string转成int不会发生拆装箱)

static void Main(string[] args)

{

//案例:把分拣奇偶数的程序用泛型实现。int[] nums = {1,2,3,4,5,6,7,8,9};奇数在左边,偶数在右边。

int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

List<int> listJi = new List<int>();

List<int> listOu = new List<int>();

for (int i = 0; i < nums.Length; i++)

{

if (nums[i] % 2 == 0)

{

listOu.Add(nums[i]);

}

else

{

listJi.Add(nums[i]);

}

}

listJi.AddRange(listOu);

foreach (var item in listJi)

{

Console.WriteLine(item);

}

Console.ReadKey();

}

static void Main(string[] args)

{

//练习1:将int数组中的奇数放到一个新的int数组中返回

//将数组中的奇数取出来放到一个集合中,最终将集合转换成数组。

int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

List<int> listJi = new List<int>();

for (int i = 0; i < nums.Length; i++)

{

if (nums[i] % 2 != 0)

{

listJi.Add(nums[i]);

}

}

//集合转换成数组

int[] numsNew = listJi.ToArray();

foreach (var item in numsNew)

{

Console.WriteLine(item);

}

Console.ReadKey();

}

这里简单顺便介绍一下初始化器(对象初始化器和集合初始化器)

这里按后面的走

//练习:把123转换为:一二三。Dictionary<char,char>

//"1一 2二 3三 4四 5五 6六 7七 8八 9九"

//123 一二三

string str = "1一 2二 3三 4四 5五 6六 7七 8八 9九";

Dictionary<char, char> dic = new Dictionary<char, char>();

string[] strNew = str.Split(new char[] { ‘ ‘ }, StringSplitOptions.RemoveEmptyEntries);

for (int i = 0; i < strNew.Length; i++)

{

//1一 strNew[i][0] strNew[i][1]

dic.Add(strNew[i][0], strNew[i][1]);

}

Console.WriteLine("请输入阿拉伯数字");

string input = Console.ReadLine();

for (int i = 0; i < input.Length; i++)

{

if (dic.ContainsKey(input[i]))

{

Console.Write(dic[input[i]]);

}

else

{

Console.Write(input[i]);

}

}

Console.ReadKey();

//练习:计算字符串中每种字符出现的次数(面试题)。 "Welcome to ChinaWorld";

string s = "Welcome to Chinaworld";

Dictionary<char, int> dic = new Dictionary<char, int>();

//遍历s

for (int i = 0; i < s.Length; i++)

{

if (s[i] == ‘ ‘)

{

continue;

}

if (dic.ContainsKey(s[i]))

{

dic[s[i]]++;

}

else

{

dic[s[i]] = 1;

}

}

foreach (KeyValuePair<char,int> kv in dic)

{

Console.WriteLine("字母{0}出现了{1}次", kv.Key, kv.Value);

}

Console.ReadKey();

//案例:两个(List)集合{"a","b","c","d","e"}和{"d","e","f","g","h"}、

List<string> listOne = new List<string>() { "a","b","c","d","e" };

List<string> listTwo = new List<string>() { "d", "e", "f", "g", "h" };

for (int i = 0; i < listTwo.Count; i++)

{

if (listOne.Contains(listTwo[i]))

{

listOne.Add(listTwo[i]);

}

}

foreach (var item in listOne)

{

Console.WriteLine(item);

}

Console.ReadKey();

静态类

结构和类的区别

class Program

{

static void Main(string[] args)

{

//类型

//结构:值类型 在内存的栈上

//类:引用类型 在内存的堆上

//声明的语法:class struct

//在类中,构造函数里,既可以给字段赋值,也可以给属性赋值。构造函数是可以重载的

//但是,在结构的构造函数中,必须只能给字段赋值

//在结构的构造函数当中,我们需要给全部的字段赋值,而不能去选择的给字段赋值

//调用:

PersonClass pc = new PersonClass();

//1.在堆开辟空间 2.在堆创建对象 3.调用构造函数初始化

//结构是否可以new?

PersonStruct ps = new PersonStruct();

ps.M2();

PersonStruct.M1();

Console.ReadKey();

//在栈中开辟空间 结构new 调用结构的构造函数

//结构和类的构造函数:

//相同点:不管是结构还是类,本身都会有一个默认的无参数的构造函数

//不同点:当你在类中写了一个新的构造函数之后,那个默认的无参数的构造函数都被干掉了

//但是,在结构当中,如果你写了一个新的构造函数,那么那么默认的无参数的构造函数怡然存在

//

//如果只是单纯的存储数据,我们推荐使用结构。

//如果我们想要使用面向对象的思想来开发程序,我们推荐使用Class。

//结构并不具备面向对象的特征

}

}

public class PersonClass

{

//字段、属性、方法、构造函数

}

public struct PersonStruct

{

private string _name;

private int _age;

private char _gender;

public string Name { get => _name; set => _name = value; }

public char Gender { get => _gender; set => _gender = value; }

public int Age1 { get => _age; set => _age = value; }

public static void M1()

{

Console.WriteLine("我是结构中的静态方法");

}

public void M2()

{

Console.WriteLine("我是结构的非静态方法");

}

public PersonStruct(string name, int age, char gender)

{

//this.Name = name;

//this.Age = age;

//this.Gender = gender;

this._name = name;

this._age = age;

this._gender = gender;

}

//public PersonStruct(string name)

//{

//    this._name = name;

//}

}

原文地址:https://www.cnblogs.com/eret9616/p/8747607.html

时间: 2024-08-03 16:44:40

.net基础总复习(1)的相关文章

C#基础总复习01

马上就快毕业了,准备把这几个月所学到的知识梳理一下,这儿所写的都是一些C#中最基础的东西(大牛不要笑话我,这也是我记录的一些笔记等等),希望能帮到一些正在学习这方面的知识的人,如果有写的不对的地方,望大神们指点. 先从最基础的说起: 1:c#是强类型语言:区分大小写:对变量的类型必须有一个明确的定义. 2:赋值运算符“=”:等号在c#并不是相等的意思,而是表示赋值,把等号右边的值赋值给等号左边的变量,由等号连接的表达式,叫做赋值表达式.要求等号两边的数据类型必须一致. 3:加号的使用:①连接,当

C#基础总复习02

继续更新第二篇: 1:一元运算符:++ -- ++:不管是前加加还是后加加,变量的值最终都会自身加一. 前加加和后加加的区别体现在参与运算的时候,如果是后加加,则首先拿原值参与运算, 运算完成后再自身加一,而前加加则是首先自身加一,然后拿着加一后的值参与运算. --:不管是前减减还是后减减,变量的值最终都会自身减一. + - * / % 是二元运算符,在一个表达式当中,既有一元运算符,也有二元运算符,应该首先计算一元运算符,一元运算符的优先级要高于二元运算符. 2:复合赋值运算符 +=:eg:a

php高级进阶系列文章--第二篇(PHP基础知识复习)

php基础知识复习 本文中对于简单的知识点只会提及一下(例如什么控制结构什么的),对于较有难度的详细复习下(例如面向对象的反射等等) 再次申明,本系列文章不是从最基础的开始复习,对于零基础的可能不适用,本文的初衷是我要准备攻读源码,在攻读前将之前的知识牢固下,太过简单的就写在文中了 1,echo print echo 可以输出一个或者多个字符串 print 只可以输出一个字符串,返回值总为1 2,PHP7中的组合比较符 echo 1 <==> 1 // 0 echo 1 <==>

考试备战系列--软考--02基础知识复习

这部分主要是计算机基础知识的概念介绍,相关系列文章如下所示. 考试备战系列--软考--01基础架构概念 考试备战系列--软考--02基础知识复习 考试备战系列--软考--03综合知识复习 考试备战系列--软考--04考题收集 考试备战系列--软考--05案例收集 考试备战系列--软考--06论文准备 操作系统时计算机系统的核心系统软件,其他软件均建立在其上,其分类包括:单用户操作系统和批处理操作系统.分时操作系统和实时操作系统.网络操作系统和分布式操作系统.嵌入式操作系统.其4大特征为并发性.共

EF6 在原有数据库中使用 CodeFirst 总复习(五、生成发帖页面)

有点与在原有数据库中使用 CodeFirst 远了,不过是总复习吗,总得全面点. 一.在用户表(Users)中插入两个用户 二.生成发帖界面 MVC生成的界面很多,也没使用Ajax,实际开发中很少会使用,这里只是为了演示. 但无论用什么生成,特性.实体对象等都是要用到的. 生成之前要编译一下. 三.先试试看能不能运行 空空如也 应该显示用户名,显示成登陆名了(其实预想的是不在新增和修改时显示,未考虑到列表),删除标记怎么也显示出来了,还有内容,能显示的下吗... 四.列显示问题 让列表显示用户,

[家里蹲大学数学杂志]第240期钟玉泉编复变函数总复习纲要

第240期_钟玉泉编复变函数总复习纲要 下载后请自行打印.预览或学习, 不要到处传播于网络, 更不要用于商业用途.

2016年初中数学知识点中考总复习总结归纳

2016年初中数学知识点中考总复习总结归纳 http://wenku.baidu.com/link?url=NbEiI_Ld2TO3zEH8d5oDxTux2IBWJ5HqNmZ467MGchJTV2G0pyG4_TauOsYhjL6Ybyqp8MxUKM_wtofUqMTc7ePR3gJv3zIY27sTuSGOaRW

c基础知识复习

C的发展历程 C原本是为了开发UNIX操作系统而设计的语言:如此说,应该C比UNIX更早问世,而事实并非如此,最早的UNIX是由汇编写的: C语言本来是美国人开发的,解读C的声明,最好还是用英语来读: 解读C声明的步骤: 1.首先着眼于标识符(变量名或者函数名) 2.从距离标识符最近的地方开始,依照优先顺序解释派生类型(指针.数组和函数).优先顺序说明如下: a.用于整理声明内容的括号: b.用于表示数组的[ ],用于表示函数的( ) c.用于表示指针的* 3.解释完成派生类型,使用 “of”.

linux基础知识复习

@(tigerfive)[linux,基础知识,复习笔记] linux基础复习(一) 今天只整理框架,具体内容之后详细整理吧 文件管理 文件基本操作>创建文件和目录>拷贝文件和目录>剪切文件和目录>删除文件和目录>查看文件和目录>查看文件属性>查看文件内容>过滤文件内容>编辑文件内容>统配符使用>命令别名 用户和组管理 用户基本操作>添加账户>设置密码>删除账户>修改密码组基本管理>创建组>查看组>