00解释
1、命名空间
可以认为类是属于命名空间的。
如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的
命名空间。
1)、用鼠标去点
2)、alt+shift+F10
3)、记住命名空间,手动的去引用
2、在一个项目中引用另一个项目的类
1)、添加引用
2)、引用命名空间
3、值类型和引用类型
区别:
1、值类型和引用类型在内存上存储的地方不一样。
2、在传递值类型和传递引用类型的时候,传递的方式不一样。
值类型我们称之为值传递,引用类型我们称之为引用传递。
我们学的值类型和引用类型:
值类型:int、double、bool、char、decimal、struct、enum
引用类型:string、自定义类、数组
存储:
值类型的值是存储在内存的栈当中。
引用类型的值是存储在内存的堆中。
3、字符串
1)、字符串的不可变性
当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟一块空间存储新值。
当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁。
2)、我们可以讲字符串看做是char类型的一个只读数组。
ToCharArray();将字符串转换为char数组
new string(char[] chs):能够将char数组转换为字符串
4、字符串提供的各种方法
1)、Length:获得当前字符串中字符的个数
2)、ToUpper():将字符转换成大写形式
3)、ToLower():将字符串转换成小写形式
4)、Equals(lessonTwo,StringComparison.OrdinalIgnoreCase):比较两个字符串,可以忽略大小写
5)、Split():分割字符串,返回字符串类型的数组。
6)、Substring():解决字符串。在截取的时候包含要截取的那个位置。
7)、IndexOf():判断某个字符串在字符串中第一次出现的位置,如果没有返回-1、值类型和引用类型在内存上存储的地方不一样。
8)、LastIndexOf():判断某个字符串在字符串中最后一次出现的位置,如果没有同样返回-1
9)、StartsWith():判断以....开始
10)、EndsWith():判断以...结束
11)、Replace():将字符串中某个字符串替换成一个新的字符串
12)、Contains():判断某个字符串是否包含指定的字符串
13)、Trim():去掉字符串中前后的空格
14)、TrimEnd():去掉字符串中结尾的空格
15)、TrimStart():去掉字符串中前面的空格
16)、string.IsNullOrEmpty():判断一个字符串是否为空或者为null
17)、string.Join():将数组按照指定的字符串连接,返回一个字符串。
5、继承
我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,
单独的封装到一个类中,作为这些类的父类。
Student、Teacher、Driver 子类 派生类
Person 父类 基类
子类继承了父类,那么子类从父类那里继承过来了什么?
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
问题:子类有没有继承父类的构造函数?
答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,
创建父类对象,让子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,
子类就调用不到了,所以子类会报错。
解决办法:
1)、在父类中重新写一个无参数的构造函数。
2)、在子类中显示的调用父类的构造函数,使用关键字:base()
6、继承的特性
1、继承的单根性:一个子类只能有一个父类。
2、继承的传递性
7、查看类图
8、object是所有类的基类。
9、new关键字
1)、创建对象
2)、隐藏从父类那里继承过来的同名成员。
隐藏的后果就是子类调用不到父类的成员。
一、面向对象复习
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _01复习
{
public class Person
{
//字段、属性、方法、构造函数
//字段:存储数据
//属性:保护字段,对字段的取值和设值进行限定
//方法:描述对象的行为
//构造函数:初始化对象(给对象的每个属性依次的赋值)
//类中的成员,如果不加访问修饰符,默认都是private
string _name;
/// <summary>
/// 属性的本质就是两个方法
/// </summary>
public string Name
{
get { return _name; }
set {
if (value != "孙全")
{
value = "孙全";
}
_name = value; }
}
int _age;
public int Age
{
get {
if (_age < 0 || _age > 100)
{
return _age = 0;
}
return _age; }
set { _age = value; }
}
char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
//this:当前类的对象
//this:调用当前类的构造函数
public void SayHello()
{
string Name = "张三";
Console.WriteLine("{0},{1},{2}",this.Name,this.Age,this.Gender);
}
private static int _id;
//静态函数只能够访问静态成员
public static void SayHelloTwo()
{
Console.WriteLine("Hello 我是静态的");
}
//构造函数:1、没有返回值 连void也没有
//2、构造函数的名称跟类名一样
public Person(string name,int age,char gender)
{
this.Name = name;
this.Age = age;
if (gender != '男' && gender != '女')
{
gender = '男';
}
this.Gender = gender;
}
public Person(string name, char gender):this(name,0,gender)
{
//this.Name = name;
//this.Gender = gender;
}
public Person()
{
}
}
}
二、命名空间
using System;
using System.Linq;
using System.Text;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.IO;
using _01复习;
namespace _02_命名空间
{
class Program
{
static void Main(string[] args)
{
Person zsPerson = new Person();
zsPerson.Name = "张三";
Console.WriteLine(zsPerson.Name);
Console.ReadKey();
//A--->ProjectA---顾客类
//B--->ProjcetB---顾客类
//C-->ProjectC---顾客类
}
}
}
三、字符串
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _04字符串
{
class Program
{
static void Main(string[] args)
{
//字符串的不可变性
//string name = "张三";
//name = "孙全";
//Console.WriteLine(name);
//Console.ReadKey();
//string s1 = "张三";
//string s2 = "张三";
//Console.ReadKey();
//可以讲string类型 看做是char类型的一个只读数组
string s = "abcdefg";
s = "bbcdefg";
// s[0] = 'b';不能这样做 因为是只读的
//首先将字符串转换为char类型的数组
char[] chs = s.ToCharArray();
chs[0] = 'b';
//将字符数组转换为我们的字符串
s = new string(chs);
//既然可以将string看做char类型的只读数组,所以我可以通过下标去访问字符串中的某一个元素
Console.WriteLine(s[0]);
Console.WriteLine(s);
Console.ReadKey();
}
}
}
四、StringBuilder
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _05StringBuilder
{
class Program
{
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder();
string str = null;
//创建了一个计时器,用来记录程序运行的时间
//00:00:00.0422166
Stopwatch sw = new Stopwatch();
sw.Start();//开始计时
for (int i = 0; i < 100000; i++)
{
//str += i;
sb.Append(i);
}
sw.Stop();//结束计时
Console.WriteLine(sb.ToString());
Console.WriteLine(sw.Elapsed);
Console.ReadKey();
}
}
}
五、字符串的各种方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _06字符串的各种方法
{
class Program
{
static void Main(string[] args)
{
//练习一:随机输入你心中想到的一个名字,然后输出它的字符串长度 Length:可以得字符串的长度
//Console.WriteLine("请输入你心中想的那个人的名字");
//string name = Console.ReadLine();
//Console.WriteLine("你心中想的人的名字的长度是{0}",name.Length);
//Console.ReadKey();
//Console.WriteLine("请输入你喜欢的课程");
//string lessonOne = Console.ReadLine();
将字符串转换成大写
lessonOne = lessonOne.ToUpper();
将字符串转换成小写形式
lessonOne = lessonOne.ToLower();
//Console.WriteLine("请输入你喜欢的课程");
//string lessonTwo = Console.ReadLine();
lessonTwo = lessonTwo.ToUpper();
lessonTwo = lessonTwo.ToLower();
//if (lessonOne.Equals(lessonTwo,StringComparison.OrdinalIgnoreCase))
//{
// Console.WriteLine("你们俩喜欢的课程相同");
//}
//else
//{
// Console.WriteLine("你们俩喜欢的课程不同");
//}
//Console.ReadKey();
//string s = "a b dfd _ + = ,,, fdf ";
分割字符串Split
//char[] chs = { ' ', '_', '+', '=', ',' };
//string[] str = s.Split(chs,StringSplitOptions.RemoveEmptyEntries);
//Console.ReadKey();
//练习:从日期字符串("2008-08-08")中分析出年、月、日;2008年08月08日。
//让用户输入一个日期格式如:2008-01-02,你输出你输入的日期为2008年1月2日
//string s = "2008-08-08";
char[] chs = { '-' };
//string[] date = s.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
//Console.WriteLine("{0}年{1}月{2}日", date[0], date[1], date[2]);
//Console.ReadKey();
//老赵
//string str = "国家关键人物老赵";
//if (str.Contains("老赵"))
//{
// str = str.Replace("老赵", "**");
//}
//Console.WriteLine(str);
//Console.ReadKey();
//Substring 截取字符串
//string str = "今天天气好晴朗,处处好风光";
//str = str.Substring(1,2);
//Console.WriteLine(str);
//Console.ReadKey();
//string str = "今天天气好晴朗,处处好风光";
//if (str.EndsWith("风"))
//{
// Console.WriteLine("是的");
//}
//else
//{
// Console.WriteLine("不是的");
//}
//Console.ReadKey();
//string str = "今天天天气好晴朗,天天处天好风光";
//int index = str.IndexOf('哈',2);
//Console.WriteLine(index);
//Console.ReadKey();
//string str = "今天天气好晴朗,处处好风光";
//int index = str.LastIndexOf('天');
//Console.WriteLine(index);
//Console.ReadKey();
LastIndexOf Substring
//string path = @"c:\a\b\c苍\d\e苍\f\g\\fd\fd\fdf\d\vfd\苍老师苍.wav";
//int index = path.LastIndexOf("\\");
//path = path.Substring(index+1);
//Console.WriteLine(path);
//Console.ReadKey();
// string str = " hahahah ";
str = str.Trim();
// //str = str.TrimStart();
// str = str.TrimEnd();
// Console.Write(str);
// Console.ReadKey();
//string str = "fdsfdsfds";
//if (string.IsNullOrEmpty(str))
//{
// Console.WriteLine("是的");
//}
//else
//{
// Console.WriteLine("不是");
//}
//string[] names = { "张三", "李四", "王五", "赵六", "田七" };
张三|李四|王五|赵六|田七
//string strNew = string.Join("|", "张三","李四","王五","赵六","田七");
//Console.WriteLine(strNew);
//Console.ReadKey();
}
}
}
六、字符串练习
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _07字符串的练习
{
class Program
{
static void Main(string[] args)
{
//课上练习1:接收用户输入的字符串,将其中的字符以与输入相反的顺序输出。"abc"→"cba"
//string str = "abcdefg";//ggedcba
//char[] chs = str.ToCharArray();
//for (int i = 0; i < chs.Length / 2; i++)
//{
// char temp = chs[i];
// chs[i] = chs[chs.Length - 1 - i];
// chs[chs.Length - 1 - i] = temp;
//}
//str = new string(chs);
//Console.WriteLine(str);
//Console.ReadKey();
//倒叙循环
//for (int i = str.Length - 1; i >= 0; i--)
//{
// Console.Write(str[i]);
//}
//"hello c sharp"→"sharp c hello"
//string str = "hello c sharp";
//string[] strNew = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
//for (int i = 0; i < strNew.Length / 2; i++)
//{
// string temp = strNew[i];
// strNew[i] = strNew[strNew.Length - 1 - i];
// strNew[strNew.Length - 1 - i] = temp;
//}
//str = string.Join(" ", strNew);
//Console.WriteLine(str);
//string.join:将字符串按照指定的分隔符连接
//Console.WriteLine(strNew);//sharp c hello
// sharp c hello
//for (int i = 0; i < strNew.Length; i++)
//{
// Console.WriteLine(strNew[i]);
//}
//课上练习3:从Email中提取出用户名和域名:abc@163.com。
//string email = "285014478@qq.com";
//int index = email.IndexOf('@');
//string userName = email.Substring(0, index);
//string yuMing = email.Substring(index+1);
//Console.WriteLine(yuMing);
//Console.WriteLine(userName);
//Console.ReadKey();
//课上练习4:文本文件中存储了多个文章标题、作者,
//标题和作者之间用若干空格(数量不定)隔开,每行一个,
//标题有的长有的短,输出到控制台的时候最多标题长度10,
//如果超过10,则截取长度8的子串并且最后添加“...”,加一个竖线后输出作者的名字。
//string path = @"C:\Users\SpringRain\Desktop\1.txt";
//string[] contents = File.ReadAllLines(path, Encoding.Default);
//for (int i = 0; i < contents.Length; i++)
//{
// string[] strNew = contents[i].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
// Console.WriteLine((strNew[0].Length>10?strNew[0].Substring(0,8)+"......":strNew[0])+"|"+strNew[1]);
//}
//Console.ReadKey();
//历史就是这么回事儿|袁腾飞
//c#基础之循环结构while、do-while|老赵
//AV|苍老师
//坏蛋是怎样炼成的怎样炼成的|六道
//让用户输入一句话,找出所有e的位置
//string str = "咳嗽、咳嗽 哈哈咳嗽 咳 咳 咳嗽";
//for (int i = 0; i < str.Length; i++)
//{
// if (str[i] == 'e')
// {
// Console.WriteLine(i);
// }
//}
//Console.ReadKey();
//int index = str.IndexOf('e');
//Console.WriteLine("第1次出现e的位置是{0}", index);
循环体:从上一次出现e的位置加1的位置找下一次e出现的位置
循环条件:index!=-1
//int count = 1;//用来记录e出现的次数
//while (index != -1)
//{
// count++;
// index = str.IndexOf('e', index + 1);
// if (index == -1)
// {
// break;
// }
// Console.WriteLine("第{0}次出现e的位置是{1}",count,index);
//}
//Console.ReadKey();
//用户输入一句话,判断这句话中有没有邪恶,如果有邪恶就替换成这种形式然后输出,如:老牛很邪恶,输出后变成老牛很**;
//string str = "老牛很邪恶";
//if (str.Contains("邪恶"))
//{
// str = str.Replace("邪恶", "**");
//}
//Console.WriteLine(str);
//Console.ReadKey();
//把{“诸葛亮”,”鸟叔”,”卡卡西”,”卡哇伊”}变成诸葛亮|鸟叔|卡卡西|卡哇伊,然后再把|切割掉
string[] names = { "诸葛亮", "鸟叔", "卡卡西", "卡哇伊" };
string str = string.Join("|", names);
string[] strNew = str.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
// Console.WriteLine(str);
Console.ReadKey();
}
}
}
七、继承
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _08继承
{
class Program
{
static void Main(string[] args)
{
//Student s = new Student();
//Driver d = new Driver();
Student s = new Student("学生", 18, '男', 101);
}
}
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
public void CHLSS()
{
Console.WriteLine("吃喝拉撒睡");
}
public Person(string name, int age, char gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
}
//public Person()
//{
//}
}
public class Student : Person
{
public Student(string name, int age, char gender, int id)
: base(name, age, gender)
{
//this.Name = name;
//this.Age = age;
//this.Gender = gender;
this.Id = id;
}
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
public void Study()
{
Console.WriteLine("学生会学习");
}
}
public class Teacher :Person
{
public Teacher(string name, int age, char gender, double salary)
: base(name, age, gender)
{
this.Salary = salary;
}
private double _salary;
public double Salary
{
get { return _salary; }
set { _salary = value; }
}
public void Teach()
{
Console.WriteLine("老师会讲课");
}
}
public class Driver:Person
{
public Driver(string name, int age, char gender, int driveTime)
: base(name, age, gender)
{
this.DirveTime = driveTime;
}
private int _dirveTime;
public int DirveTime
{
get { return _dirveTime; }
set { _dirveTime = value; }
}
public void Drive()
{
Console.WriteLine("司机会开车");
}
}
}
八、继承练习
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _09继承练习
{
class Program
{
static void Main(string[] args)
{
//记者:我是记者 我的爱好是偷拍 我的年龄是34 我是一个男狗仔
//司机:我叫舒马赫 我的年龄是43 我是男人 我的驾龄是 23年
//程序员:我叫孙全 我的年龄是23 我是男生 我的工作年限是 3年
Reporter rep = new Reporter("狗仔", 34, '男', "偷拍");
rep.ReporterSayHello();
Programmer pro = new Programmer("程序猿", 23, '男', 3);
pro.ProgrammerSayHello();
Console.ReadKey();
}
}
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
public Person(string name, int age, char gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
}
}
public class Reporter : Person
{
public Reporter(string name, int age, char gender, string hobby)
: base(name, age, gender)
{
this.Hobby = hobby;
}
private string _hobby;
public string Hobby
{
get { return _hobby; }
set { _hobby = value; }
}
public void ReporterSayHello()
{
Console.WriteLine("我叫{0},我是一名狗仔,我的爱好是{1},我是{2}生,我今年{3}岁了",this.Name,this.Hobby,this.Gender,this.Age);
}
}
public class Programmer : Person
{
private int _workYear;
public int WorkYear
{
get { return _workYear; }
set { _workYear = value; }
}
public void ProgrammerSayHello()
{
Console.WriteLine("我叫{0},我是一名程序猿,我是{1}生,我今年{2}岁了,我的工作年限是{3}年",this.Name,this.Gender,this.Age,this.WorkYear);
}
public Programmer(string name, int age, char gender, int workYear)
: base(name, age, gender)
{
this.WorkYear = workYear;
}
}
}
九、关键字new
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _10关键字_new
{
class Program
{
static void Main(string[] args)
{
Reporter rep = new Reporter("记者", 11, '男', "偷拍");
rep.SayHello();
rep.Test();
Console.ReadKey();
}
}
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
private char _gender;
public char Gender
{
get { return _gender; }
set { _gender = value; }
}
public Person(string name, int age, char gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
}
public void Test()
{
Console.WriteLine("测试");
}
public void SayHello()
{
Console.WriteLine("大家好,我是人类");
}
}
public class Reporter : Person
{
public Reporter(string name, int age, char gender, string hobby)
: base(name, age, gender)
{
this.Hobby = hobby;
}
private string _hobby;
public string Hobby
{
get { return _hobby; }
set { _hobby = value; }
}
public void ReporterSayHello()
{
Console.WriteLine("我叫{0},我是一名狗仔,我的爱好是{1},我是{2}生,我今年{3}岁了", this.Name, this.Hobby, this.Gender, this.Age);
}
public new void SayHello()
{
Console.WriteLine("大家好,我是记者");
}
}
public class Programmer : Person
{
private int _workYear;
public int WorkYear
{
get { return _workYear; }
set { _workYear = value; }
}
public void ProgrammerSayHello()
{
Console.WriteLine("我叫{0},我是一名程序猿,我是{1}生,我今年{2}岁了,我的工作年限是{3}年", this.Name, this.Gender, this.Age, this.WorkYear);
}
public Programmer(string name, int age, char gender, int workYear)
: base(name, age, gender)
{
this.WorkYear = workYear;
}
public new void SayHello()
{
Console.WriteLine("大家好,我是程序员");
}
}
}