第十一篇——面向对象继承(二)

1、复习

1、类

2、对象

{字段;

属性;

方法}

3、构造函数

2、命名空间

解决类的重名问题,等于类的文件夹

如果没有包含类的命名空间就不能使用该类

using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _1_命名空间
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<int> list = new List<int>();//缺少对应的命名空间,报错
        }
    }
}

在一个项目中引用另外一个项目的类

1、添加引用

2、引用命名空间(被引用者访问修饰符应为 public级别)

3、值类型和引用类型

区别

1、在内存上存储的地方不一样:堆  栈  静态空间

2、在传递时,传递方式不同:值类型称之为值传递,引用类型称之为引用传递

1、值类型:

int、double、bool、char、decimal、struct、enum

存储在内存的栈中

2、引用类型:

string、自定义类、数组

存储在内存的堆中

4、字符串的一些性质

一、字符串的不可变性

栈中空间不变,指向改变;堆中开辟新空间

给字符串重新赋值后,老值并未删除,仍存在,开辟新空间存储新址。

string 在栈中的指向由新地址代替旧地址,实现更改过程

当程序结束后,GC扫描整个内存,只要发现存在空间没有被指向,则立即销毁

二、不同的string类型的变量的赋值内容一样时,堆地址相同

三、我们可以将字符串看成做是char类型组成的一个只读数组

string s = "abcdef";
Console.WriteLine(s[1]);

字符串与char数组之间的相互转换

            string s = "abcdef";
            Console.WriteLine(s[1]);
            //将 s中的第一个字符 a 变为字符 b 
            //s[0] = 'b';//报错。因为类型只读
            //先将字符串s 变为数组形式再该字符,调用s.ToCharArray();实现
            char[] chr = s.ToCharArray();
            chr[0] = 'b'; //对原字符串无影响,需要再转换为字符串来输出
            s = new string (chr);
            Console.WriteLine(s);

StringBuilder

            StringBuilder sb = new StringBuilder();//没有多开额外的空间
            string str = null;

            //创建计时器用来计时
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 100000; i++)
            {
                //str += i; 不停的重复开辟空间,较慢
                sb.Append(str);//Append 方法
            }
            sw.Stop();
            Console.WriteLine(sb.ToString());//输出sb对象的方法时重新转换回字符串
            Console.WriteLine(sw.Elapsed);
            Console.ReadKey();

5、字符串的方法

一、Length

字符串长度

二、字符串大小写转换

ToUpper();  转大写   

ToLower();转小写

.Equals();

            Console.WriteLine("李四,请输入一门你喜欢的课程的名字");
            string n1 = Console.ReadLine();
            //n1 = n1.ToLower();//转为小写
            //n1 = n1.ToUpper();//转为大写
            Console.WriteLine("张三,请输入一门你喜欢的课程的名字");
            string n2 = Console.ReadLine(); 
            if(n1.Equals(n2,StringComparison.OrdinalIgnoreCase) )
            {
                Console.WriteLine("你们喜欢的课程一致");
            }

三、字符串的分割

使用.split()方法

            string r = "ad  we  + ij  -";
            char[] str = { ' ', '-', '+' };//声明char类型数组,将不要字符放进去
            //string[] r1 = r.Split(str);//调用Split删除不要的字符(实际变为空),返回一个字符串类型的数组,数组中元素为被删去字符隔开的部分
            string[] r1 = r.Split(str, StringSplitOptions.RemoveEmptyEntries);//输出不带空的结果
            Console.WriteLine(r1[2]);
            Console.ReadKey();

练习

            string s = "2008-01-05";
            string[] s1 = { "-0" };
            string [] s2 = s.Split(s1, StringSplitOptions.RemoveEmptyEntries);
            Console.WriteLine("当前时间为{0}年{1}月{2}日", s2[0], s2[1], s2[2]);
            Console.ReadKey();

四、一些方法

判断和替换

            string s = "关键人物老冯";
            if (s.Contains("老冯"))  //判断是否存在关键字
            {
                s = s.Replace("老冯","XX"); //替换关键字为其他设定好的字符
            }
            Console.WriteLine(s);   
            Console.ReadKey();

.Substring();

            string s = "今天天气好晴朗,处处好风光";
            s = s.Substring(1,2);//Substring 从指定的位置开始分割截取包含指定位置的之后的部分,第二个数字代表往后截取的长度
            Console.WriteLine(s);   
            Console.ReadKey();

.StsrtsWitth(); 判断字符串中是否以某字符串开始       

.EndsWith();判断字符串中是否以XX结束

.IndexdOf();  字符串中XX第一次出现的位置,如果没出现过返回-1        .LastIndexOf();字符串中XX最后一次出现的位置

            Console.WriteLine("请输入作者名和标题");
            string s1 = Console.ReadLine();
            int index = s1.IndexOf(" ");
            if (index > 10)
            {
                index = s1.LastIndexOf(" "); //找到最后一个空格的位置
                string name = s1.Substring(index + 1);
                string s2 = s1.Substring(0, 8);
                Console.WriteLine(s2 + "..." + name);
            }
            else
            {
                Console.WriteLine(s1);
            }
            Console.ReadKey();

.Trim();  替换字符串前后的空格     

.TrimStart();  替换字符串之前的空格     

.TrimEnd();去掉字符串之后的空格

string.IsNullOrEmpty();判断是否为空或为null

string.Join();将数组按指定的字符串连接,返回一个字符串

            string[] str = { "鸟叔", "卡哇伊", "四单", "指甲", "终极" };
            string s = string.Join("|",str);

6、继承

涵义

把几个类中的相同部分单独拿出来封装成一个父类

①子类继承了父类什么?

可以访问到什么就继承什么

②是否继承构造函数?

没有继承父类的构造函数。但是子类会默认调用父类无参数的构造函数,创建父类无参数的对象,让子类可以使用父类中的成员

所以,如果在父类函数中写了一个含参的构造函数,无参的构造函数就被干掉了,子类无法调用就会报错

解决办法:

①在父类中重新写一个无参的构造函数

②在子类中显示的调用父类的构造函数,使用关键字base()

public class Person//父类  基类

public class Student : Person//子类  派生类

Public class Teacher : Person//子类  派生类

继承的特性

1、继承的单根性:只能继承1个基类

public class Person

public class Student :

Public class Teacher : Person,Student//会报错,继承多个基类

2、传递性

public class Person   

public class Student : Person

Public class Teacher : Student

Teacher可以用Student,也可以用Person

object类

所有类的基类;

c#中所有的类都直接或间接继承了object类

7、关键字的new隐藏父类成员

1、创建对象

2、隐藏从父类继承过来的同名成员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值