C#基础总结

10 篇文章 0 订阅

A.基础数据/基本数据 :值类型:

()括号中的数据代表字节数

(1)byte,sbyte (2)short,ushort,(4)int,uint,(8)long,ulong

   (4)float,(8)double,(16)decimal   double 取值范围最大,decimal精度最高

  (2)char (1)bool

:引用类型

string 类型,类 类型。。。。。。。。

值类型和引用类型的区别:存储方式的不同

1.值类型的数据是直接存储在内存的栈中 例如 int a = 4 ; 在内存栈中开辟了4个字节内存去存储这个数据,变量a是这个内存的名字

2.引用类型的数据是存放在内存的堆中的,例如 string a = " 舒志恒!";在内存的堆中存放了 舒志恒!这个数据,在内存栈中 a变量存放的是一个地址的引用,就是说可以通过这个变量访问到堆中存放数据的地址。

string 和 stringBuilder的区别

字符串是不可以改变的,stringBuilder是可变的字符串,在频繁的对字符串进行修改的时候,推荐使用stringBuilder.

 

B.值类型的转换:显示转换,隐式转换

1.显示转换(强制类型转换),例如 int a = (int)12.5f;

2. 隐式转换 例如 double a = 12;

3.静态类提供了一系列值类型的转换方法Convert

 

C.常见的循环语句,判断语句。。。。

1. if() else{}   if() else if() {} else{}......................................

2.for循环,while循环,do{} while();循环

 

D.数组(4种常见的排序方法 冒泡,选则,插入,快排,在博客里已有总结(代码实现了))

一维数组:一组数据集合

1.存储相同类型的数据

2.数据可以通过下标访问

int[] arr={};直接定义一般只限于声明数组时初始化数据;
int[] arr;
arr={};//错误的,不成立
int[] arr=new int[长度];
int[] arr=new int[]{,,,};

二维数组:int[,] arr = new int [行数,列数]; int[,] arr = {{},{},{}}

交错数组:int [][] arr = new int [行数][];

int[][] arr=new int[3][]{new int[]{10},new int[]{200,100},new int[]{3}};
arr[1][1]=300;
//{{10},{200,300},{3}}

E.面向对象,

1.类:程序中的基本单位:1,引用类型 2.对一类具有相同属性和方法的对象的集合,抽象统称;

自定义类时,未定义构造函数,那默认会自动添加一个无参构造函数;
自定义类时,定义构造函数,默认不创建;
类拥有实例成员:字段,属性,方法,索引器,事件;
类拥有常量,静态成员;

问 结构和类十分类似  ,它们之间有什么区别

1.结构是值类型   ,类是引用类型

2.结构不可以定义无参的构造函数 ,类可以定义无参的构造函数

3.结构可以不通过new操作符去初始化,类必须通过new操作符进行初始化

4.结构不可以继承,也不可以被继承,但可以实现接口。类可以继承,也可以被继承

5.结构在使用前必须进行数据初始化。

抽象类特点:

1.不可以实例化 2.可以定义抽象成员(属性,方法,索引器)3.子类继承抽象类必须重写抽象成员

abstract class F{

    public abstract  string Name{get;}

   public abstract void move();

}

接口的特点:

1.不可以实例化 2.接口成员不可以有具体的实现,3.子类实现接口必须实现成员

interface IAction{

   string Name{get;}

   string GetName();  //默认修饰符都是public

}

类是单继承,接口是多实现

2.对象,万物皆对象,类的实例化。

3.封装:将数据和函数集合到一个个单元中(类中)作用:保存数据的安全性,防止数据被随意修改。

一般数据存储在字段中的,访问通过属性,数据处理用函数;
注意:单一性

4种访问修饰符:

public:对任何类和成员都公开,无限制访问

private:仅对该类公开

protected:对该类和其派生类公开

internal:只能在包含该类的程序集中访问该类

4.继承:子类只能继承一个父类,继承该类中所有非私有的成员;
做用:
1.节省开发时间,提高代码重用性;
2.进行代码扩展;(例如List)

F.委托(delegate)事件(event),匿名函数,lamda表达式

1.委托:一种类型,一种方法引用的类型;一个委托指向了一个方法的引用,或者说一个委托对象指向了方法的对象;

委托的定义格式:public delegate 返回值 MyDelegate(参数列表); Action 无参数,无返回值的委托,Action<T a> 参数为T型 a 类型的委托 Func<T> 返回值为 T型的委托

要注意的是Func<T>返回值类型为T类型的委托类型,当Fun中委托对象指向了多个方法时,返回最后一个执行的方法

附上一个小案例

下面看一个小案例,输入一个字符串

要求1。将所有的大写字母变成小写

     2 。将所有的小写字母变成大些,

    3。将输入的字符串后面+*号

 static string ToUpper(string str)
        {
            return str.ToUpper();
        }

        static string ToLower(string str)
        {
            return str.ToLower();
        }

        static string ToStar(string str)
        {
            return str + "*";
        }

        static void Mydelegate(Func<string,string> func,string str)

        {

            Console.WriteLine(func(str));

        }

在Main函数中测试

Mydelegate(ToUpper, "abc");   //ABC

Mydelegate(ToLower, "ABC"); abc

Mydelegate(ToStar, "abc"); abc*

2.事件

1.事件其实就是一种特殊的委托,一般用于传递消息

2.不允许在定义的外部使用 = 赋值,可以使用+= -= 移除添加方法等

3.实例(事件传递消息的案例 博客里总结了, 英雄攻击怪物的 热水器的题目)

 

3.写一个简单的匿名函数,和lamda表达式

匿名函数  Action a  = delegate({Console.WriteLine("我是一个匿名函数")});

lamda表达式 Func<int > f = ()=>{return 12;};

G.集合(泛型) 非泛型

1.ArrayList 和List有什么区别?

性能的消耗 ArrayList 是非泛型的 进行数据存储是会涉及到频繁的装箱(拆箱)而每次装箱,拆箱,都涉及到cpu 分配内存,资源分配等等,十分消耗性能,

List是泛型 ,可以指定类型存储数据 推荐使用泛型减少性能的消耗

2.字典:键值对集合;通过键访问值;Dictionary
动态数组:List 通过下标访问
队列:Queue 先进先出
栈:Stack 后进先出(实例 要求实现一个栈,可以入栈和出栈,并求存储的最小值)
链表:LinkedList(数据的删除,和添加效率较高)

H.进程,多线程,Socket通信,Tcp/ip

1.进程是(cpu,内存分配的)一个资源单位,是程序运行时的一个实例

2.线程是程序执行时分配的最小单位, 一个进程可由多个线程组成,线程共享进程中的资源

3.实例(用多线程实现了一个猜数字小游戏)

Socket通信 三次握手,四次放手,和Socket通信的原理在博客中已有总结(加上代码实现了)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值