C#---继承

命名空间
可以认为类是属于命名空间的。
如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间。
1)、用鼠标去点

2)~ alt+shift+F10
3)、记住命名空间,手动的去引用

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

1)、添加引用
2)、引用命名空间

值类型和引用类型区别:
1、值类型和引用类型在内存上存储的地方不一样。
2、在传递值类型和传递引用类型的时候,传递的方式不一样。

值类型我们称之为值传递,引用类型我们称之为引用传递.

我们学的值类型和引用类型:
值类型: int 、 double、 bool、char. decimal、struct、 enum

引用类型: string、自定义类、数组
存储:
值类型的值是存储在内存的栈当中

引用类型的值是存储在内存的堆中。

字符串
1)、字符串的不可变性
当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟一块空间存储新值

当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,则立即把它销毁。

2)、我们可以讲字符串看做是char类型的一个只读数组。

TocharArray): 将字符串转换为char数组
new string(char[] chs):  能够将char数组转换为字符串

字符串提供的各种方法
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():将数组按照指定的字符串连接,返回一个字符串。

//可以讲string类型,看作是char类型的一个只读数组
            //既然可以将string看做char类型的只读数组,所以我可以通过下标去访问字符串中的某一个元素。
             String s = "asfafaffwwe";
            //s[0] = 'g';不能这样子做,因为是只读的
            //首先将字符串转换为char类型的数组
            Char[] chs = s.ToCharArray();
            chs[0] = 'g';
            //将字符数组转换为我们的字符串
            s = new string(chs);
            Console.WriteLine(chs[0]);
            Console.WriteLine(chs);
            Console.ReadKey();

        练习题 

   StringBuilder sb = new StringBuilder();

            /* //创建一个计时器,用来记录程序运行的时间
             Stopwatch sw = new Stopwatch();
             sw.Start();//开始计时
             for (int i = 0; i < 10000; i++)
             {
                 // str += i;
                 sb.Append(i);
             }
             sw.Stop();//结束计时
             Console.WriteLine(sw.Elapsed);*/
            //课上练习1∶接收用户输入的字符串,将其中的字符以与输入相反的顺序输出。"abc "=" cba"
            /*  String str = "asfdafasfw";
              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);*/

            // 练习2:"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);
             //for (int j = 0; j < strNew.Length; j++)
             //{
             //    Console.WriteLine(strNew[j]);
             //}*/

            // 课上练习3:从Email中提取出用户名和域名: abc@163.com。
            /* string email = "abc@163.com";
             int index = email.IndexOf('@');
             string userName = email.Substring(0, index);
             string yuMing = email.Substring(index + 1);
             Console.WriteLine(userName);
             Console.WriteLine(yuMing);*/
            //课上练习4:文本文件中存储了多个文章标题、作者,
            //标题和作者之间用若干空格(数量不定)隔开,每行一个,
            //标题有的长有的短,输出到控制台的时候最多标题长度10,
            //如果超过10,则截取长度8的子串并且最后添加"...”,加一个竖线后输出作者的名字。

            /* string path = @"‪C:\Users\acer\Desktop\a.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]);
             }*/
            //让用户输入—句话,找出所有e的位置
            string str = "efegeadsgagweweeg";
            int index = str.IndexOf('e');
            Console.WriteLine("第一次出现E的位置是{0}", index);
            int count = 1;
            while (index != -1)
            {
                count++;
                index = str.IndexOf('e', index + 1);
                if (index == -1)
                {
                    break;
                }
                Console.WriteLine("第{0}次出现E的位置是{1}",count, index);
            }
            Console.ReadKey();

继承

我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,
单独的封装到一个类中,作为这些类的父类。
Student、Teacher、Driver  子类  派生类
Person                                 父类  基类
子类继承了父类,那么子类从父类那里继承过来了什么?
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
问题:子类有没有继承父类的构造函数?
答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,
创建父类对象,让子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,
子类就调用不到了,所以子类会报错。
解决办法:
1)、在父类中重新写一个无参数的构造函数。
2)、在子类中显示的调用父类的构造函数,使用关键字:base()

1、继承的特性
1、继承的单根性:一个子类只能有一个父类。
2、继承的传递性

2、查看类图

3、object是所有类的基类。


4、new关键字
1)、创建对象
2)、隐藏从父类那里继承过来的同名成员。
隐藏的后果就是子类调用不到父类的成员。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值