当前位置: 首页 > news >正文

C#基础知识点

 

1.动态(Dynamic)类型

您可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。

声明动态类型的语法:

动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。

    dynamic <variable_name> = value;

动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。


 

2.字符串(String)类型--@形式

C# string 字符串的前面可以加 @(称作"逐字字符串")将转义字符(\)当作普通字符对待,比如:

 

    string str = @"C:\Windows";

等价于:

    string str = "C:\\Windows";

@ 字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内。

string str = @"<script type=""text/javascript"">
        <!--
        -->
        </script>";

简单说,@字符串将原样输出.


3.定义常量

常量是使用 const 关键字来定义的 。定义一个常量的语法如下:

    const <data_type> <constant_name> = value;

例如:

     1 const double pi = 3.14159; 


4.switch 语句

C# 中 switch 语句的语法:

 1 switch(expression){
 2     case constant-expression  :
 3        statement(s);
 4        break;
 5     case constant-expression  :
 6        statement(s);
 7        break;
 8  
 9     /* 您可以有任意数量的 case 语句 */
10     default : /* 可选的 */
11        statement(s);
12        break;
13 }

switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。switch 语句必须遵循下面的规则:

  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。

case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量。

  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。

  • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。

  • 不是每一个 case 都需要包含 break。如果 case 语句为空,则可以不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。

  • C# 不允许从一个开关部分继续执行到下一个开关部分。如果 case 语句中有处理语句,则必须包含 break 或其他跳转语句。

  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。

  • C# 不支持从一个 case 标签显式贯穿到另一个 case 标签。如果要使 C# 支持从一个 case 标签显式贯穿到另一个 case 标签,可以使用 goto 一个 switch-case 或 goto default。


5.两个特殊的访问修饰符

Internal 访问修饰符:

    可访问域限定于类所在的程序集内,一般就是同一个exe或dll文件.

Protected Internal 访问修饰符:

    protected或者internal,即可访问域限定于类所在的程序或那些由它所属的类派生的类内.


6.C#中的参数传递

a.按值传递参数:

    

b.按引用传递参数:

    在 C# 中,使用 ref 关键字声明引用参数。当然,是定义方法时用。

c.按输出传递参数:

    return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。

    在 C# 中,使用 out 关键字声明输出参数。当然,也是定义方法时用。

    提供给输出参数的变量不需要赋值。


7.C# 可空类型(Nullable)

可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值。

在处理数据库和其他包含可能未赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型的功能特别有用。

声明一个 nullable 类型(可空类型)的语法如下:

    < data_type> ? <variable_name> = value;

例如:

1 int? num1 = null;
2 double? num4 = 3.14157;
3 bool? boolval = new bool?();

Null 合并运算符( ?? ):如果第一个操作数的值为 null,则运算符返回第二个操作数的值,否则返回第一个操作数的值。

例如:

1 double? num1 = null;
2 double? num2 = 3.14157;
3 double num3;
4 num3 = num1 ?? 5.34; //num3=5.34
5 num3 = num2 ?? 5.34; //num3=3.14157

8.类 vs 结构


类和结构有以下几个基本的不同点:

  • 类是引用类型,结构是值类型。

  • 结构不支持继承。

  • 结构不能声明默认的构造函数。


9.C# 中的析构函数

类的 析构函数 是类的一个特殊的成员函数,当类的对象超出范围时执行。

析构函数的名称是在类的名称前加上一个波浪形(~)作为前缀,它不返回值,也不带任何参数。

析构函数用于在结束程序(比如关闭文件、释放内存等)之前释放资源。析构函数不能继承或重载。

例如Line类的析构函数:

1 ~Line() //析构函数
2 {
3     Console.WriteLine("对象已删除");
4 }

10.继承


继承(实现)的基本语法:

    class 子类:父类{

        ...    

    }

子类继承父类的构造方法用:base()


11.C#多态性

多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。

多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。

静态多态性:

在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为:

  • 函数重载

  • 运算符重载

动态多态性:

动态多态性是通过 抽象类 和 虚方法 实现的。

通过在类定义前面放置关键字 sealed,可以将类声明为密封类。当一个类被声明为 sealed 时,它不能被继承。抽象类不能被声明为 sealed。

虚方法就是抽象方法,虚方法必须被重写。

虚方法是使用关键字 virtual 声明的,而重写时则必须用关键字 override 注明。


12.运算符重载

您可以重定义或重载 C# 中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。

重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。

例如,请看下面的函数:

 

1 public static Box operator+ (Box b, Box c)
2 {
3    Box box = new Box();
4    box.length = b.length + c.length;
5    box.breadth = b.breadth + c.breadth;
6    box.height = b.height + c.height;
7    return box;
8 }

上面的函数为用户自定义的类 Box 实现了加法运算符(+)。它把两个 Box 对象的属性相加,并返回相加后的 Box 对象

13. using (StreamReader sr = File.OpenText(path)) {...}语句

意思是在执行完using()的花括号中的语句时,将调用括号里实例化的对象的Dispose方法,将对象从托管堆中释放。

不是所有的对象声明都可以这样写,对于对象中没有包含Dispose方法的,不能用这个语句写。

转载于:https://www.cnblogs.com/xmjz/p/5310750.html

相关文章:

  • 不用bootstrap,只用CSS创建网格布局
  • 次小生成树模板
  • 最大非连续子序列
  • MongoDB 数据库安装
  • 返回一个整数数组中最大子数组的和
  • 魔兽登录系统
  • 任务栏托盘不消失的问题-有启示
  • OAuth2 基于TP 搭建简单案例
  • __OSX_AVAILABLE_STARTING
  • simpson公式求定积分
  • hdu 1166 敌兵布阵(线段树详解)
  • java获取获得Timestamp类型的当前系统时间。
  • 在SQLServer使用触发器实现数据完整性
  • 软件测试学习日志3 ————软件测试作业之控制流图
  • 【bzoj1046】[HAOI2007]上升序列
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • android图片蒙层
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • css属性的继承、初识值、计算值、当前值、应用值
  • E-HPC支持多队列管理和自动伸缩
  • fetch 从初识到应用
  • Lucene解析 - 基本概念
  • nfs客户端进程变D,延伸linux的lock
  • Node项目之评分系统(二)- 数据库设计
  • Python实现BT种子转化为磁力链接【实战】
  • spring boot 整合mybatis 无法输出sql的问题
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 开源SQL-on-Hadoop系统一览
  • 码农张的Bug人生 - 初来乍到
  • 前端技术周刊 2019-02-11 Serverless
  • 如何解决微信端直接跳WAP端
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​马来语翻译中文去哪比较好?
  • #### go map 底层结构 ####
  • (8)STL算法之替换
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)【Hibernate总结系列】使用举例
  • .gitattributes 文件
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET Remoting学习笔记(三)信道
  • .Net6 Api Swagger配置
  • .NET项目中存在多个web.config文件时的加载顺序
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @RequestBody与@ResponseBody的使用