C#--核心

发布时间:2024年01月11日

CSharp核心知识点学习

学习内容有:

绪论:面向对象的概念

Lesson1:类和对象

练习:

Lesson2:封装--成员变量和访问修饰符

练习:

Lesson3:封装--成员方法

Lesson4:封装--构造函数和析构函数

知识点四 垃圾回收机制--面试常考

练习:

Lesson5:成员属性

练习:

Lesson6:封装--索引器

练习:

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

namespace Lesson6_练习
{

    #region 练习
    //自定义一个整形数组类,该类中有一个整形数组变量
    //为它封装增删查改的方法

    class IntArray
    {
        private int[] array;
        //房间容量
        private int capacity;
        //当前放了几个房间
        private int length;

        public IntArray()
        {
            capacity = 5;
            length = 0;
            array = new int[capacity];
        }

        //增
        public void Add(int value)
        {
            //如果要增加就涉及扩容
            //扩容就涉及"搬家"
            if(length < capacity)
            {
                array[length] = value;
                ++length;
            }
            //扩容“搬家”
            else
            {
                capacity *= 2;
                //新房子
                int[] tempArray = new int[capacity];
                for (int i = 0; i < array.Length; i++)
                {
                    tempArray[i] = array[i];
                }
                //老的房子地址 指向新房子地址
                array = tempArray;

                //传入的往后放
                array[length] = value;
                ++length;
            }
        }

        //删
        //指定内容删除
        public void Remove(int value)
        {
            //找到 传入值 在哪个位置
            for (int i = 0; i < length; i++)
            {
                if(array[i] == value)
                {
                    RemoveAt(i);
                    return;
                }
            }
            Console.WriteLine("没有在数组中找到{0}",value);
        }

        //指定索引删除
        public void RemoveAt(int index)
        {
            if(index > length)
            {
                Console.WriteLine("当前数组只有{0},你越界了",length);
                return;
            }
            for (int i = index; i < length - 1; i++)
            {
                array[i] = array[i + 1];
            }
            --length;
        }

        //查改
        public int this[int index]
        {
            get
            {
                if(index >= length || index < 0)
                {
                    Console.WriteLine("越界了");
                    return 0;
                }
                return array[index];
            }
            set
            {
                if (index >= length || index < 0)
                {
                    Console.WriteLine("越界了");
                }
                array[index] = value;
            }
        }

        public int Length
        {
            get
            {
                return length;
            }
        }
    }

    #endregion

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("索引器练习");

            IntArray intArray = new IntArray();
            intArray.Add(1);
            intArray.Add(2);
            Console.WriteLine(intArray.Length);
            //intArray.RemoveAt(1);
            intArray.Remove(2);
            Console.WriteLine(intArray[0]);
            //Console.WriteLine(intArray[1]);
            Console.WriteLine(intArray.Length);
            

        }
    }
}

Lesson7:封装--静态成员

练习:

Lesson8:封装-- 静态类和静态构造函数

Lesson9:封装--拓展方法

练习:

Lesson10:封装--运算符重载

练习:

Lesson11:封装--内部类和分部类

Lesson12:继承--继承的基本规则

练习:

Lesson13:继承--里氏替换原则

练习:

Lesson14:继承--继承中的构造函数

练习:

Lesson15:继承--万物之父和装箱拆箱

练习:

Lesson16:继承--密封类

练习:

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

namespace Lesson16_练习
{

    #region 练习
    //定义一个载具类
    //有速度,最大速度,可乘人数,司机和乘客等,有上车,下车,行驶,车祸等方法
    //用载具类申明一个对象,并将若干人装载上车

    class Car
    {
        public int speed;
        public int maxSpeed;
        //当前装了多少人
        public int num;
        
        public Person[] person;

        public Car(int speed, int maxSpeed, int num)
        {
            this.speed = speed;
            this.maxSpeed = maxSpeed;
            this.num = 0;
            person = new Person[num];
        }

        public void GetIn(Person p)
        {
            if(num >= person.Length)
            {
                Console.WriteLine("满载了");
                return;
            }
            person[num] = p;
            ++num;
        }

        public void GetOff(Person p)
        {
            for (int i = 0; i < person.Length; i++)
            {
                if(person[i] == null)
                {
                    break;
                }
                if (person[i] == p)
                {
                    //移动位置
                    for (int j = i; j < num - 1; j++)
                    {
                        person[j] = person[j + 1];
                    }
                    //最后一个位置清空
                    person[num - 1] = null;
                    --num;
                    break;
                }
            }
        }

        public void Move()
        {

        }

        public void Boom()
        {
             
        }
        
    }

    class Person
    {

    }

    class Driver : Person
    {

    }

    class Passenger : Person
    {

    }

    #endregion

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("封装继承综合练习");

            Car car = new Car(80, 100, 20);
            Driver driver = new Driver();
            Passenger p1 = new Passenger();
            Passenger p2 = new Passenger();
            Passenger p3 = new Passenger();
            car.GetIn(driver);
            car.GetIn(p1);
            car.GetIn(p2);
            car.GetIn(p3);
            car.GetOff(p1);

        }
    }
}

练习调试!!!

Lesson17:多态--vob

通过这节课的知识--解决了Lesson13 的练习题

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

namespace Lesson13_练习
{

    #region 练习一
    //is和as的区别
    //is 用于判断 类对象判断是不是某个类型的对象  bool
    //as 用于转换 把一个类对象 转换成一个指定类型的对象  null
    #endregion

    #region 练习二
    //写一个Monster类,它派生出Boss和Gobin两个类
    //Boss有技能,小怪有攻击
    //随机生成10个怪,装载到数组中
    //遍历这个数组,调用他们的攻击方法,如果是boss就释放技能

    class Monster
    {

    }

    class Boss : Monster
    {
        public void Skill()
        {
            Console.WriteLine("Boss释放技能");
        }
    }

    class Goblin : Monster
    {
        public void Atk()
        {
            Console.WriteLine("小怪攻击");
        }
    }
    #endregion

    #region 练习三
    //FPS游戏模拟
    //写一个玩家类,玩家可以拥有各种武器
    //线在有四种武器,冲锋枪,散弹枪,手枪,匕首
    //玩家默认拥有匕首
    //请在玩家类中写一个方法,可以拾取不同的武器替换自己拥有的武器

    class Weapon
    {
        public virtual string Input()
        {
            return null;
        }
    }

    /// <summary>
    /// 冲锋枪
    /// </summary>
    class SubmachineGun : Weapon
    {
        public override string Input()
        {
            return "冲锋枪";
            //Console.WriteLine("冲锋枪");
        }
    }

    /// <summary>
    /// 散弹枪
    /// </summary>
    class ShotGun : Weapon
    {
        public override string Input()
        {
            return "散弹枪";
            //Console.WriteLine("散弹枪");
        }
    }

    /// <summary>
    /// 手枪
    /// </summary>
    class Pistol : Weapon
    {
        public override string Input()
        {
            return "手枪";
            //Console.WriteLine("手枪");
        }
    }

    /// <summary>
    /// 匕首
    /// </summary>
    class Dagger : Weapon
    {
        public override string Input()
        {
            return "匕首";
            //Console.WriteLine("匕首");
        }
    }

    class Player
    {
        private Weapon nowHaveWeapon;

        public Player()
        {
            nowHaveWeapon = new Dagger();
        }

        public void PickUp(Weapon weapon)
        {
            nowHaveWeapon = weapon;
        }

        public void Show()
        {
            Console.WriteLine("当前玩家使用的武器是:{0}",nowHaveWeapon.Input());
        }
    }

    #endregion

    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("里氏替换原则练习");

            //随机生成10个怪物
            Monster[] objects = new Monster[10];
            Random r = new Random();
            int box = 0;
            for (int i = 0; i < objects.Length; i++)
            {
                box = r.Next(1, 3);
                if(box == 1)
                {
                    objects[i] = new Boss();
                }
                else
                {
                    objects[i] = new Goblin();
                }
            }

            //遍历数组
            for (int i = 0; i < objects.Length; i++)
            {
                if(objects[i] is Boss)
                {
                    (objects[i] as Boss).Skill();
                }
                else if(objects[i] is Goblin)
                {
                    (objects[i] as Goblin).Atk();
                }
            }


            Player p = new Player();
            p.Show();
            Weapon submachineGun = new SubmachineGun();
            
            p.PickUp(submachineGun);
            p.Show();

            //遗留一个问题:重写?!!
            //通过学习Lesson17--多态ovb    得以解决
        }
    }
}

练习:

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

namespace Lesson17_练习
{

    #region 练习一
    //真的鸭子嘎嘎叫,木头鸭子吱吱叫,橡皮鸭子唧唧叫
    class Duck
    {
        public virtual void Speak()
        {
            Console.WriteLine("嘎嘎叫");
        }
    }

    class WoodDuck : Duck
    {
        public override void Speak()
        {
            //base.Speak();
            Console.WriteLine("吱吱叫");
        }
    }

    class RubberDuck : Duck
    {
        public override void Speak()
        {
            //base.Speak();
            Console.WriteLine("唧唧叫");
        }
    }
    #endregion

    #region 练习二
    //所有员工9点打卡
    //但经理十一点打卡,程序员不打卡

    class Staff
    {
        public virtual void PunchTheClock()
        {
            Console.WriteLine("普通员工9点打卡");
        }
    }

    class Manager : Staff
    {
        public override void PunchTheClock()
        {
            //base.PunchTheClock();
            Console.WriteLine("经理11点打卡");
        }
    }

    class Programmer : Staff
    {
        public override void PunchTheClock()
        {
            //base.PunchTheClock();
            Console.WriteLine("程序员不打卡");
        }
    }

    #endregion

    #region 练习三
    //创建一个图形类,有求面积和周长两个方法
    //创建矩形类,正方形类,圆形类继承图形类
    //实例化矩形,正方形,圆形对象求面积和周长

    class Graph
    {
        public virtual float GetLength()
        {
            return 0;
        }

        public virtual float GetArea()
        {
            return 0;
        }
    }

    class Rect : Graph
    {
        private float w;
        private float h;

        public Rect(float w, float h)
        {
            this.w = w;
            this.h = h;
        }

        public override float GetLength()
        {
            //return base.GetLength();
            return 2 * (w + h);
        }

        public override float GetArea()
        {
            //return base.GetArea();
            return w * h;
        }
    }

    class Square : Graph
    {
        private float h;

        public Square(float h)
        {
            this.h = h;
        }

        public override float GetLength()
        {
            //return base.GetLength();
            return 4 * h;
        }

        public override float GetArea()
        {
            //return base.GetArea();
            return h * h;
        }
    }

    class Circule : Graph
    {
        private float r;

        public Circule(float r)
        {
            this.r = r;
        }

        public override float GetLength()
        {
            //return base.GetLength();
            return 2 * 3.14F * r;
        }

        public override float GetArea()
        {
            //return base.GetArea();
            return 3.14f * r * r;
        }
    }

    #endregion

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("多态ovb");
            Console.WriteLine("virtual   override   base");

            Duck d = new Duck();
            d.Speak();

            Duck wd = new WoodDuck();
            wd.Speak();

            Duck rd = new RubberDuck();
            rd.Speak();


            Staff s = new Staff();
            s.PunchTheClock();

            Staff ma = new Manager();
            ma.PunchTheClock();
            (ma as Manager).PunchTheClock();

            Staff pr = new Programmer();
            (pr as Programmer).PunchTheClock();

            Rect r = new Rect(2, 4);
            Console.WriteLine("矩形的周长是:" + r.GetLength());
            Console.WriteLine("矩形的面积是:" + r.GetArea());

            Square sq = new Square(4);
            Console.WriteLine("正方形的周长是:" + sq.GetLength());
            Console.WriteLine("正方形的面积是:" + sq.GetArea());

            Circule ci = new Circule(3);
            Console.WriteLine("圆的周长是:" + ci.GetLength());
            Console.WriteLine("圆的面积是:" + ci.GetArea());

        }
    }
}

Lesson18:多态--抽象类和抽象方法

练习:

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

namespace Lesson18_练习
{

    #region 练习一
    //写一个动物抽象类,写三个子类
    //人叫、狗叫、猫叫

    abstract class Animal
    {
        public abstract void Speak();
    }

    class Person : Animal
    {
        public override void Speak()
        {
            Console.WriteLine("人在说话");
        }
    }

    class Dog : Animal
    {
        public override void Speak()
        {
            Console.WriteLine("狗在汪汪叫");
        }
    }

    class Cat : Animal
    {
        public override void Speak()
        {
            Console.WriteLine("猫在喵喵叫");
        }
    }

    #endregion

    #region 练习二
    //创建一个图形类,有求面积和周长两个方法
    //创建矩形类,正方形类,圆形类继承图形类
    //实例化矩形,正方形,圆形对象求面积和周长

    abstract class Graph
    {
        public abstract float GetLength();

        public abstract float GetArea();
    }

    class Rect : Graph
    {
        private float w;
        private float h;

        public Rect(float w, float h)
        {
            this.w = w;
            this.h = h;
        }

        public override float GetLength()
        {
            //return base.GetLength();
            return 2 * (w + h);
        }

        public override float GetArea()
        {
            //return base.GetArea();
            return w * h;
        }
    }

    class Square : Graph
    {
        private float h;

        public Square(float h)
        {
            this.h = h;
        }

        public override float GetLength()
        {
            //return base.GetLength();
            return 4 * h;
        }

        public override float GetArea()
        {
            //return base.GetArea();
            return h * h;
        }
    }

    class Circule : Graph
    {
        private float r;

        public Circule(float r)
        {
            this.r = r;
        }

        public override float GetLength()
        {
            //return base.GetLength();
            return 2 * 3.14F * r;
        }

        public override float GetArea()
        {
            //return base.GetArea();
            return 3.14f * r * r;
        }
    }

    #endregion

    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("抽象类和抽象方法");

            Person p = new Person();
            p.Speak();
            Dog dog = new Dog();
            dog.Speak();
            Animal cat = new Cat();
            cat.Speak();

        }
    }
}

Lesson19:多态--接口

练习:重要,加深对接口的应用

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

namespace Lesson19_练习
{

    #region 练习一
    //人、汽车、房子都需要登记,人需要到派出所登记,汽车需要去车管所登记,房子需要去房管局登记
    //使用接口实现登记方法

    interface IRegister
    {
        void Register();
    }

    class Person : IRegister
    {
        public void Register()
        {
            Console.WriteLine("派出所登记");
        }
    }

    class Car : IRegister
    {
        public void Register()
        {
            Console.WriteLine("车管所登记");
        }
    }

    class Home : IRegister
    {
        public void Register()
        {
            Console.WriteLine("房管局登记");
        }
    }

    #endregion

    #region 练习二
    //麻雀、鸵鸟、企鹅、鹦鹉、直升机、天鹅
    //直升机和部分鸟能飞
    //鸵鸟和企鹅不能飞
    //企鹅和天鹅能游泳
    //除直升机,其他都能走
    //请用面向对象相关知识实现

    abstract class Bird
    {
        public abstract void Walk();
    }

    interface IFly
    {
        void Fly();
    }

    interface ISwimming
    {
        void Swimming();
    }

    //麻雀
    class Sparrow : Bird,IFly
    {
        public void Fly()
        {
            
        }

        public override void Walk()
        {
            
        }
    }

    //鸵鸟
    class Ostrich : Bird
    {
        public override void Walk()
        {

        }
    }

    //企鹅
    class Penguin : Bird,ISwimming
    {
        public void Swimming()
        {
            throw new NotImplementedException();
        }

        public override void Walk()
        {

        }
    }

    //鹦鹉
    class Parrot : Bird,IFly
    {
        public void Fly()
        {
            throw new NotImplementedException();
        }

        public override void Walk()
        {

        }
    }

    //天鹅
    class Swan : Bird,IFly,ISwimming
    {
        public void Fly()
        {
            throw new NotImplementedException();
        }

        public void Swimming()
        {
            throw new NotImplementedException();
        }

        public override void Walk()
        {

        }
    }

    //直升机
    class Helicopter : IFly
    {
        public void Fly()
        {
            throw new NotImplementedException();
        }
    }


    #endregion

    #region 练习三
    //多态来模拟移动硬盘、U盘、MP3插到电脑上读取数据
    //移动硬盘与U盘都属于存储设备
    //MP3属于播放设备
    //但他们都能插在电脑上传输数据
    //电脑提供一个USB接口
    //请实现电脑的传输数据的功能

    interface IUSB
    {
        void ReadData();
    }

    class StorageDevice : IUSB
    {
        public string name;
        public StorageDevice(string name)
        {
            this.name = name;
        }

        public void ReadData()
        {
            Console.WriteLine("{0}传输数据",name);
        }
    }

    class MP3 : IUSB
    {
        public void ReadData()
        {
            Console.WriteLine("MP3传输数据");
        }
    }

    class Computer
    {
        public IUSB usb1;
    }

    #endregion

    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("接口练习");

            IRegister p = new Person();
            p.Register();
            Car car = new Car();
            car.Register();
            Home home = new Home();
            home.Register();

            StorageDevice hd = new StorageDevice("移动硬盘");
            StorageDevice ud = new StorageDevice("U盘");
            MP3 mp3 = new MP3();

            Computer cp = new Computer();

            cp.usb1 = hd;
            cp.usb1.ReadData();
            cp.usb1 = ud;
            cp.usb1.ReadData();
            cp.usb1 = mp3;
            cp.usb1.ReadData();


        }
    }
}

Lesson20:多态--密封方法

Lesson21:面向对象相关--命名空间

练习:

Lesson22:面向对象相关--万物之父中的方法

练习:

Lesson23:面向对象相关--string

练习:

Lesson24:面向对象相关--StringBuilder

练习:

Lesson25:面向对象相关--结构体和类的区别

Lesson26:面向对象相关--抽象类和接口的区别

学习完成:

CSharp核心实践小项目见下一篇笔记!

牢记--多看!!!

你还有好多东西要学习呢,抓紧时间啊!!!

文章来源:https://blog.csdn.net/SunsetSunup/article/details/135034949
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。