.net学习第十天

面向对象的继承

1、命名空间

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


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

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


3、值类型和引用类型

区别:
1、值类型和引用类型在内存上存储的地方不一样。
2、在传递值类型和传递引用类型的时候,传递的方式不一样。
值类型我们称之为值传递,引用类型我们称之为引用传递。
我们学的值类型和引用类型:
值类型:int、double、bool、char、decimal、struct、enum
引用类型:string、自定义类、数组
存储:
值类型的值是存储在内存的栈当中。
引用类型的值是存储在内存的堆中。


3、字符串

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


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


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 面向对象的继承
{
    class Program
    {
        static void Main(string[] args)
        {
            string s1 = "hello";
            string s2 = "hello";
            //不可变行
            //可以把字符串看成一个char类型的数组,但是是只读的
            string s = "abcdefg";
            //可以通过下标获得字符串中的某一个元素
            Console.WriteLine(s[0]);
            //Console.ReadKey();
            //想要改变这个字符串的第一个字符
            //不能s[0]= 'b'
            //首先将字符串转化为字符类型数组
            char[] chs = s.ToCharArray();
            chs[0] = 'b';
            //将字符数组转换为数组
            s = new string(chs);
            Console.WriteLine(s[0]);
            Console.ReadKey();

        }
    }
}

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;

namespace stringBuilder应用
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            string str = null;
            Stopwatch sm = new Stopwatch();
            //创建一个计时器,用来记录程序运行的时间
            sm.Start();
            for (int i = 0; i < 100000; i++)
			{
			   // str+=i;
                sb.Append(i);

			}
            sm.Stop();
            Console.WriteLine(sm.Elapsed);
            Console.ReadKey();
        }
    }
}



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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace string的方法
{
    class Program
    {
        static void Main(string[] args)
        {
            #region
            //Console.WriteLine("请输入你喜欢的课程");
            //string lesson1 = Console.ReadLine();
            //Console.WriteLine("请输入你喜欢的课程");
            //string lesson2 = Console.ReadLine();
            //lesson1 = lesson1.ToUpper();
            //lesson2 = lesson2.ToLower();
            //if(lesson1.Equals(lesson2,StringComparison.OrdinalIgnoreCase))
            //{
            //    Console.WriteLine("两人喜欢的类型一样");
            //    Console.ReadLine();
            //    return;
            //}
            //Console.WriteLine("你们选择的类型不同");
            //Console.ReadKey();
            #endregion
            //分割字符串s.split()六种重载
            //string s = "ab   def _ +   = - defrt ";
            //char[] chs = { ' ', ',', '+', '-', '.' };
            //string[] str = s.Split(chs, StringSplitOptions.RemoveEmptyEntries);
            //Console.WriteLine(str[1]);
            //Console.ReadKey();
            //string s = "2008-08-08";
            //char[] chs = {'-'};
            //string[] strs = s.Split(chs, StringSplitOptions.RemoveEmptyEntries);
            //Console.WriteLine("{0}年{1}月{2}日", strs[0], strs[1], strs[2]);
            //Console.ReadKey();
            //判断一个字符串中是否有关键字
            //string str = "国家关键人物老赵";
            //if(str.Contains("老赵"))
            //{
            //    str.Replace("老赵", "**");
            //}
            //Console.WriteLine(str);
            //Console.ReadKey();
            string str = "今天天气真晴朗,处处好风光";
            //str = str.Substring(1);
            //Console.WriteLine(str);
            //Console.ReadKey();
            //if(str.StartsWith("今天"))
            //{
            //    Console.WriteLine("yes");
            //}
            //else
            //{
            //    Console.WriteLine("no");
            //}
            //Console.ReadKey();

            //int index = str.IndexOf("天");
            //Console.WriteLine(index);
            //Console.ReadKey();
            //int index = str.LastIndexOf("天");
            //lastIndexof sbstring
            //string path = @"c:\a\b\c\v\c\d\f\f\g\d\a.wav";
            找到最后一个出现斜线的位置
            //int index = path.LastIndexOf("\\");
            //path = path.Substring(index+1);
            //Console.WriteLine(path);
            //Console.ReadKey();
            //string strr = "     jfhdfkofeh           ";
            //strr = strr.Trim();
            //strr = strr.TrimEnd();
            //strr = strr.TrimStart();
            //Console.WriteLine(strr);
            //Console.ReadKey();
            //string strr = null;
            //strr = "";
            //if(string.IsNullOrEmpty(strr))
            //{
            //    Console.WriteLine("yes");
            //}
            //else
            //{
            //    Console.WriteLine("no");
            //}
            //Console.ReadKey();
            string[] names = { "张三", "李四", "王五", "赵六" };
            string strnew = string.Join("|", "张三", "李四", "王五", "赵六");
            Console.WriteLine(strnew);
            Console.ReadKey();
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace string练习
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "abcdefg";
            StringBuilder sb = new StringBuilder();
            for (int i = str.Length-1; i >=0; i--)
            {
                sb.Append(str[i]);
            }
            Console.WriteLine(sb);
            Console.ReadKey();
        }
    }
}




5、继承

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace string练习
{
    class Program
    {
        static void Main(string[] args)
        {
            //string str = "abcdefg";
            //StringBuilder sb = new StringBuilder();
            //for (int i = str.Length-1; i >=0; i--)
            //{
            //    sb.Append(str[i]);
            //}
            //Console.WriteLine(sb);
            //Console.ReadKey();
            Student s = new Student();
            //子类不能继承父类的私有字段;
            //继承的单根性,子类只能有一个父类
            //继承的传递性
            Driver d = new Driver();
            //查看类图
            
            
        }
    }

    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 chlas()
        {
            Console.WriteLine("吃喝拉撒睡");
        }
    }

    class Student:Person
    {

        private int _id;

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public void study()
        {
            Console.WriteLine("学生会学习");
        }

        
    }
    class Teacher:Student
    {

        private int salary;

        public int Salary
        {
            get { return salary; }
            set { salary = value; }
        }

        public void teach()
        {
            Console.WriteLine("老师会教书");
        }
        
    }
    class Driver:Teacher
    {
         

        private int _driveTime;

        public int DriveTime
        {
            get { return _driveTime; }
            set { _driveTime = value; }
        }

       public void drive()
        {
            Console.WriteLine("司机会开车");
        }

    }
}

6、继承的特性

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


7、查看类图

视图——》查看类图

8、object是所有类的基类。





9、new关键字

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





































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值