C#之基础

C#语言及其特点

C#是基于.NET框架上的编程语言之一

C#是微软公司发布的一种面向对象的、运行于.NET Framework和.NET Core之上的高级程序设计语言。
C#是一种安全的、稳定的、简单的、优雅的,由c和c++衍生出来的面向对象的编程语言。它在继承c和c++强大功能时去掉了一些它们的复杂特性。
C#是面向对象的编程语言。
在这里插入图片描述

基本语法

整型

byte(字节型)范围0~255
short(短整型)范围-32768~32767
int(整型)范围-2147483648~2147483647
long长整型-910^18 ~ 910^18

浮点型

float 浮点型 float c = 1.2F 定浮点型后面必须标明F
double双精度浮点型

十进制类型

decimal精度比浮点高

//后面需加上M
decimal e = 1.2M;

bool类型

只有两个值true或者false

字符串类型

string 字符串
char 字符 只能有一个值

string str = "你好";
char cr = '1';

空类型

null

swich

在这里插入图片描述

for

在这里插入图片描述

数组

在这里插入图片描述

函数

在这里插入图片描述

out 和 ref 的区别 out 传进来的实参必给 参数重新赋值

如图所示则会报错
在这里插入图片描述
ref定义的参数必须在调用方法之前给参数赋值,否则报错
在这里插入图片描述
在这里插入图片描述

面向对象

在这里插入图片描述

在这里插入图片描述

类和对象

在这里插入图片描述

函数的访问修饰符

public 公有的所有的类都可以访问
private 只有当前类部访问
protected 受保护的当前类和子类可以访问
internal 内部的只限于本项目访问
protected internal 只能本项目或者子类访问

多态

在这里插入图片描述
在这里插入图片描述

抽象类

1、抽象类中的抽象属性和抽象方法必须是公有的,因此必须有public修饰符
2、子类必须override抽象类中的所有抽象属性和抽象方法,如果没有全部override,那么子类必须是抽象类
3、抽象类中可以有非抽象属性和非抽象方法,也可以是私有或者公有,但是如果是私有的话子类就不能访问,无意义,所以一般情况下都设置为公有
4、有抽象方法或抽象属性的类一定是抽象类,抽象类中的属性或方法不一定都是抽象的
在这里插入图片描述

接口

在这里插入图片描述
抽象类与抽象方法:
1.使用关键字abstract修饰的类,称为抽象类.
2.抽象类只是用到一个类所具有的行为,不能单独通过创建对象来使用.使用new是错误的.
3.抽象类中可以有抽象方法,也可以没有任何抽象方法.
4.抽象类不能是静态的(static)或者密封的(sealed)

抽象方法的概念与使用要点:
1.在抽象类中使用abstract修饰的方法,称为抽象方法.
2.抽象方法必须在抽象类中定义,不能再普通类中使用.
3.抽象方法只能是一个方法的申明,不能有任何的方法体.
4.抽象方法仅仅表示一个应该具有的行为,具体实现由子类实现.
5.抽象方法在子类中被实现(重写)必须使用关键字override.
6.子类必须重写父类的所有抽象方法,除非子类本身也是抽象类.

多态:
不同对象,接收相同消息,产生不同的行为,称为多态。

使用继承实现多态:
父类中必须有抽象方法或虚方法.
子类必须重写父类中的抽象方法或虚方法.
子类对象必须转换成父类对象去使用.

LSP:李氏替换原则:
1.子类的对象能够替换其父类.
2.父类对象不能替换子类.
3.父类的方法都要在子类中实现或者重写.

is与as操作符:
is,检查对象是否与指定类型兼容,如果转换失败程序中断.
as 用于在兼容的引用类型之间执行转换,转换失败返回null.

抽象方法仅仅是声明,没有任何实现内容。
抽象方法必须在子类中重写以后才有使用价值.

针对抽象方法问题引出:
如果需要在父类中提供一个方法,该方法有自己的方法体,子类根据自己的需求决定是否重写该方法,而不是必须重写.

父类方法定义成:virtual,子类可以重写也可以不重写.
虚方法如同抽象方法一样,可以实现多态.
子类没有重写虚方法时,直接调用父类的虚方法.

构造方法,用来对象创建过程中初始化。

Equals默认支持的是引用相等,想让对象相同,重写Equals

虚方法和抽象方法
用virtural修饰,要有方法体,哪怕是一个分号,可以被子类override,除了密封类都可以写
用abstract修饰,不允许有方法体,必须被子类override,只能在抽象类中.

关于Equals()虚方法:
对于字符串和值类型能够自动比较是否相等.
对于对象比较必须重写后才有意义.

关于ToString()虚方法:
默认返回该对象的完全限定类型名称,可根据需要重写.
而对于值类型,因为重写的该方法,则返回变量值的字符串表示.

结构体

struct loca
        {
            public int a;
            public int b;
            public loca(int a,int b)
            {
                this.a = a;
                this.b = b;
            }
        }
        static void Main(string[] args)
        {
            loca lo = new loca(2, 3);
            lo.a = 22;
            Console.WriteLine(lo);
        }

枚举

  enum ca
        {
            red,
            pink,
            orangin
        }
        static void Main(string[] args)
        {
            ca a = new ca();
            a = ca.red;
            Console.WriteLine(a);
        }

结构体和枚举都是值类型

操作符重载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

using

Disposable在这里插入图片描述

处理导入资源还能用于清理资源
在这里插入图片描述

在这里插入图片描述

委托

public delegate bool IsQiu(int num,int rezul);
        static IsQiu ev = delegate (int num, int rezul) { return  num < rezul; }; // 求最小值
        static IsQiu evs = delegate (int num, int rezul) { return  rezul < num; }; //求最大值
        static int sho(int[] it, IsQiu iq)
        {
            int rezul = it[0];
            for (int i = 0; i < it.Length; i++)
            {
                if (iq(i,rezul))
                {
                    rezul = it[i];
                }
            }
            return rezul;
        }
        static void Main(string[] args)
        {

            int[] arr = new int[]{ 2,3,4,1,5,6};
            //求最小值
            int ad = sho(arr, ev);
            Console.WriteLine(ad);
        }

Lambda

上面例子还有一种更简单的封装

 public delegate bool IsQiu(int num,int rezul);
        
        static int sho(int[] it, IsQiu iq)
        {
            int rezul = it[0];
            for (int i = 0; i < it.Length; i++)
            {
                if (iq(i,rezul))
                {
                    rezul = it[i];
                }
            }
            return rezul;
        }
        static void Main(string[] args)
        {

            int[] arr = new int[]{ 2,3,4,1,5,6};
            //求最小值
            int min = sho(arr,(a,b)=> a<b);
            //求最大值
            int max = sho(arr, (a, b) => b < a);
            Console.WriteLine(max);
            Console.WriteLine(min);
        }

反射

在这里插入图片描述

using System;

#nullable disable

namespace Models.Entity
{
    public class Advert
    {
        public int Id { get; set; }
        public int SortId { get; set; }
        public string Url { get; set; }
        public string Image { get; set; }
        

        private int ul;
        public int Ul { 
            get => ul; 
            set => ul = value; 
        }
        public void show()
        {
            Console.WriteLine("很好");
        }
        public static void show1()
        {
            Console.WriteLine("版本");
        }
        public static void show2()
        {
            Console.WriteLine("不被");
        }
    }
}

通过反射获取类中的所有属性或方法

//反射
            //动态加载 dll
            Assembly assembly = Assembly.Load("ConsoleApp1");

            //获取类型
            Type type = assembly.GetType("Models.Entity.Advert");
            foreach (var item in assembly.GetTypes())
            {
                Console.WriteLine(item);
                //foreach (var items in item.GetMethods())
                //{
                //    Console.WriteLine(items);
                //}
            }
            dynamic ab = Activator.CreateInstance(type);
            ab.show();

线程

在这里插入图片描述
在这里插入图片描述

var tas = new Task(() =>
            {
                for (int i = 0; i < 100; i++)
                {
                    Console.WriteLine(i);
                }
            });
            tas.Start(); //启动线程
            tas.Wait();  //等待线程执行完毕 会阻塞

在这里插入图片描述

Stopwatch 可以获取某段程序编译后的时间

在这里插入图片描述

并行处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

锁(lock)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

DateTime

在这里插入图片描述

Regex

 Regex regex = new Regex(@"^\d");
            bool a = regex.IsMatch("bc");
            Console.WriteLine(a);
            var date = DateTime.Now;
            string str = date.ToString("yyyy-MM-dd HH:mm:ss");
            Console.WriteLine(str);

在这里插入图片描述

装箱拆箱

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值