C#_基础
1、形参与实参
形参是函数定义时的参数,实参是函数被引用时传给它的参数
2、重载与重写
- 重载:发生在同一个类中,函数(方法)名相同但参数列表必须不同,返回类型可以不同
- 重写:发生在继承类之间,子类必须用override关键字来改写从父类继承过来的成员(函数、属性等),且函数的签名(函数名称、返回类型、参数列表)必须相同。父类中的函数在子类中只能被重写一次,被重写的函数必须有virtual或abstract或override修饰
3、virtual与abstract的区别
- virtual(虚拟的),abstract(抽象的) 两者都是指明被修饰的方法可以被派生类(子类)重写
- virtual修饰的方法必须有实现部分,abstract修饰的方法一定不能有实现
public virtual void Fun(){}
public abstract void Fun()
- virtual修饰的方法被子类重写,可有可无;abstract修饰的方法必须被子类重写
- abstract修饰的方法只能存在于抽象类中(用abstract修饰的类),virtual没这个限制
abstract public class Funs(){
public abstract void Fun();
}
4、接口
- 定义:是一种定义程序的协议(规范),用Interface声明,描述类或结构的一组行为。包含属性、索引器、时间和方法的任意组合,不能包含字段。
- 特点:作用:应用程序解耦;快速分离工作,提高开发效率;统一标准
- 继承接口的类必须实现接口的所有成员
- 接口不能直接实例化,可通过派生类来实例化
- 接口不能实现自己的成员,只能通过派生类来实现成员
- 例子:
public Interface IPerson
{
public string sex;
public void sleep();
.....
}
5、字段
- 是类或结构中的成员,字段使得类和结构可以封装数据。
- 字段通常为private,外部访问字段可通过方法、属性和索引器间接访问字段。
6、属性
- 属性可通过字段对数据进行简单的安全性检查,字段则不能
- 类或结构中的成员
- 属性中,get()是读取功能,set()是写入功能,两者决定属性是只读,只写还是读写
旧版C#写法: C# 6.0写法:
private string strname = "mike"; public string Name{ get; set; }="mike";
public string Name
{
get{return strname;}
set{strname = value;}
}
7、索引器
- 允许类和结构的实例按照与数组相同的方式进行索引,与属性类似,只是索引器(get/set)的访问权采用了参数
- this关键字是索引器的名称,value关键字定义由set分配的值
- 索引器可以被重载
- 索引器可以有多个形参,如访问二维数组
- 属性与索引器的作用与区别:
- 属性用于以可验证的方式访问私有成员变量。索引器用于以更便捷的方式访问对象中包含的成员数组或集合。
- 属性名可自定义,索引器必须以this命名。
- 属性可以为实例或静态,索引器必须是实例的。
- 索引器有索引参数列表,而属性没有
- 代码
class say<T>
{
private T[] arr = new T[10];//T是数据类型
public T this[int i]
{
get { return arr[i]; }
set { arr[i] = value; }
}
}
static void Main(string[] args)
{
say<string> s = new say<string>();
//string[] s = new string[5];
s[0] = "hello mike";
Console.WriteLine(s[0]);
Console.ReadKey();
}
8、结构与类
结构和类共享几乎所有相同的语法,区别在于:
- 结构struct关键字定义,类class关键字定义数据类型和行为。
- 结构是值类型,类是引用类型
- 结构没有析构函数,类有且只有一个析构函数
- 结构如果有构造函数,那么构造函数必须有参数
- 结构不能继承。所有结构的基类都是System.ValueType
- 结构的实例化不可用使用new运算符,除非其拥有构造函数
- 类是分配在内存的堆上,结构是分配在内存的栈上
9、构造函数
其名称与类名相同,用于实例化对象时,设置默认值,编写易阅读的代码
- 只要创建类或结构,就会调用它的构造函数。类和结构可以拥有多个不同参数的构造函数。
- 使用this关键字来调用同一对象中的另一个构造函数
- 使用base关键字调用其基类的构造函数
10、析构函数
与类同名,前面加~。作用:回收内存,隐士释放资源。
- 只存在类中,且一个类只有一个析构函数
- 析构函数无法继承和重载
- 不能手动调用,是自动调用。垃圾回收器决定何时调用,程序退出也会调用
- 析构函数没有修饰符,没有参数
- 建议不使用空的析构函数,避免性能丢失
11、委托
将一个方法作为另一个方法的参数进行传递,delegate关键字声明。这种将方法动态地赋给参数的做法,可以避免在程序中大量使用if-else(switch)语句,同时使得程序具有更好的可扩展性。
- 是一种引用方法的类型,可以理解为类。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。
- 委托方法的使用可以像其他任何方法一样,具有参数和返回值,与委托的签名(由返回类型和参数组成)匹配的任何方法都可以分配给该委托。
- 委托链:多个方法可以绑定在一个委托变量上,调用时被绑定的方法的执行顺序由绑定顺序决定
- 绑定方法:用 +=,移除方法:用-=
GreetingDelegate delegate1 = new GreetingDelegate();
delegate1 += EnglishGreeting; // 这次用的是 “+=”,绑定方法。
delegate1 += ChineseGreeting; // 给此委托变量再绑定一个方法
12、泛型
- 是一种数据类型,主要是将类型参数化,用T来定义,如Mylist<T>。
- 定义时不指明参数的具体数据类型,调用时必须指明。适用于类、方法、接口、委托
- 好处:提高代码的重用性,提高软件开发效率;编译时检查类型安全,减少装箱、拆箱,提高性能
13、 ==与equal的区别
- 对于字符串,两者比较的都是变量的值,效果一样。
- 对于非字符串的引用类型(非匿名类型),两者比较的都是变量的引用,不是其值。
- 对于匿名类型,equal比较的是变量的状态(其属性和值相同时,返回true),==比较的是变量的引用
14、static
- 修饰的对象是静态的。静态对象不能实例化
- 用途:当程序中所有实例共用的方法或者值,可以使用静态方法或静态字段。使用static时需注意线程安全,因为所有实例共用该静态对象,都可以更改他的值
- 静态类中只能有静态成员,不可以有非静态成员;
- 非静态类可以有非静态成员和静态成员,静态成员通过点的方式直接访问,非静态成员通过创建该类的实例访问;
- 静态类中的所有成员,无需创建实例就可以访问。访问方式:静态类名.成员
15、var与dynamic的区别
- var是动态推断类型,dynamic是动态类型。
- var变量的数据类型是在编译时决定的,编译时要进行类型检查,
- dynamic变量的数据类型是在运行时决定的,编译时不进行类型检查,在运行时进行类型检查。因此dynamic的效率比var低
- 实际上var与dynamic没有可比性
16、public、private、protect、Internal修饰符的访问权限
- public:公有成员,完全公开,无限制
- private:私有成员,该类的内部可以访问
- protect:保护成员,该类和继承类可以访问
- Internal:同一命名空间内可以访问
17、递归算法
- 自己调用自己。当调用次数太多时,效率很低。可用循环等其他方法代替
public int diguifun(int i)
{
int sum = 0;
if(i<0){ sum=0; }
else if(i==1){ sum=1; }
else{ sum = diguifun(i-1)+diguifun(i-2); }
return sum
}
18、冒泡排序算法
- 从小到大:两个for循环嵌套,两两相比较,交换位置(采用中间变量过度),小的放前面
19、
C#_基础的更多相关文章
- web前端学习python之第一章_基础语法(二)
web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- web前端学习python之第一章_基础语法(一)
web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- SSM整合_年轻人的第一个增删改查_基础环境搭建
写在前面 SSM整合_年轻人的第一个增删改查_基础环境搭建 SSM整合_年轻人的第一个增删改查_查找 SSM整合_年轻人的第一个增删改查_新增 SSM整合_年轻人的第一个增删改查_修改 SSM整合_年 ...
- CI下载与安装_基础配置_MVC
CI:CodeIgniter -- 由Ellislab公司的CEORickEllis开发,是一个简单快速的PHP MVC框架. =============下载和安装================地址 ...
- 3011C语言_基础知识
第一章 基础知识 1.1 基本框架 //任何一个c语言程序都必须包括以下格式: int main(int argc, char *argv[] ) { : } //这是c语言的基本结构,任何一个程 ...
- 1.1python基础_基础
1_编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: UTF-8 -*- ...
- C++_基础_C与C++的区别
内容: (1)C++简介和编程的基本变化 (2)命名空间的概念和使用 (3)结构体.联合.枚举的不同 (4)布尔类型 以及 运算符别名 (5)函数的重载.缺省参数.哑元以 及内联 1.简介和编程的基本 ...
- C++_基础_C与C++的区别2
内容: (1)C++中的函数 (2)动态内存 (3)引用 (4)类型转换 (5)C++社区对C程序员的建议 1.C++中的函数1.1 函数的重载(1)重载的概念 在同一个作用域中,函数名相同,函数的参 ...
- Java内存模型_基础
线程之间的通信机制有两种: 1.共享内存:线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式的通信. 2.消息传递:线程之间没有公共状态,线程之间必须发送消息来显示的进行通信 同步:是指程 ...
- C#_基础题1-10套答案
one 1.用户输入一个整数,用if...else判断是偶数还是奇数 Console.WriteLine("请输入一个整数:"); ...
随机推荐
- WCF入门简单教程(图文) VS2010版
在这个例子中我们将使用VS 2010 创建一个WCF服务,其中会了解 [DataContract] [ServiceContract] 等特性. 内置的 WCFSVCHost ,并使用“WCF测试客 ...
- vc6.0如何显示行号以及出现版本不兼容问题
有时编译时,提示某某行有错,但是要定位到某一行的话,如果在编辑页面能够将行号显示出来,查找也就更方便了,下面我来介绍一下让VC6.0显示行号的方法. 工具/原料 VC6.0.显示行号的插件 方 ...
- Oracle Data Guard的配置
概述 Oracle Data Guard 是针对企业数据库的最有效和最全面的数据可用性.数据保护和灾难恢复解决方案.它提供管理.监视和自动化软件基础架构来创建和维护一个或多个同步备用数据库,从而保护数 ...
- <mvc:annotation-driven/>与<context:annotation-config/>的区别
在使用注解的方式配置SSM的时候一般会配置<mvc:annotation-driven/>与<context:annotation-config/>,有时候会对两者的概念有些区 ...
- LogConfigruration
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import ...
- android模拟器genymotion安装virtualbox不能为虚拟电脑启动一个新任务
错误详情如下: Unable to load R3 module C:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastErro ...
- 自己建二维obj
经常用到啊 在项目流程管理里面用到
- 关于Js OOP编程 创建对象的一些理解。
面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物. 对象的含义 对象可以是汽车,人,动物,文字,表单或者任何存在的事物等等. 对象有: 属性----- ...
- WPF依赖属性DependencyProperty
写在之前: 依赖属性算是WPF醉醉基础的一个组成了.平时写代码的时候,简单的绑定很轻松,但是遇到复杂的层次比较多的绑定,真的是要命.所以,我觉得深刻认识依赖属性是很有必要的.本篇只是个人学习的记录,学 ...
- mina-http之坑
TCP是流式协议,不保证一次通信传输完整的包,当这种情况发生在mina-http时会产生严重的bug,图中红框部分只是将前后收到的数据拼在一起,但下面处理的还是最近收到的不完整的msg:此为大坑! 轻 ...