C#知识点总结【1】
值类型和引用类型
从概念上看,其区别是值类型直接存储其值,引用类型存储值的引用。
在内存当中的状态,值类型存储在堆栈(zhan)中,而引用类型存储在托管堆上。
int i = 20;
int j = i;
上面的例子中 内存中会存储两个值,一个是i 一个是j;
Vector x, y;
x = new Vector();
x.Value = 30;
y = x;
Console.WriteLine(y.Value);
y.Value = 50;
Console.WriteLine(x.Value);
这段代码 内存中只存储了一个引用 Vector 而x和y 是其内部变量,所以对x的更改赋值给y,y值的也会跟着变化。
另外引用对象可以设置为null,这样可以表示不引用任何对象;
CTS类型
(通用类型系统)
预定义值类型有
{整型:sbyte,shory,int,long,byte,ushort,uint,ulong}
{浮点:float,double}
{高精度浮点:decimal}
{真假值:bool}
{字符:char}
预定义的引用类型
{object,string}
枚举
枚举是用户定义的一组整数类型集合。
public enum TimeOfDay
{
Morning = 0,
Afternoon = 1,
Evening = 3,
}
有三个有点,1.易于维护,2.代码更清晰,3.易于输入。
C#预处理指令
编译器是否编译此段代码的 预编译指令是 使用 #define 配合 #if #elif #else 和 #endif 使用
#define DEBAGB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
#if DEBAGA
Console.WriteLine("不编译");
#elif DEBAGB
Console.WriteLine("编译");
#endif
}
}
}
此时程序就不会编译 DEBAGA 代码段 只输出编译
这样做的好处在于将来如果不想测试代码了 可以使用 #undef 讲编译代码注销掉
#define 和 #undef 都是写在 cs 页面的顶部 才可以使用 ;
#waring #error 是作为一条标记信息;
#region #endregion 注释;
#line 改变编译器在显示错误信息后的行号;
#pragma 可以抑制或者还原制定的编译警告;
类和结构
类和结构内部构造相同但是区别 在于在内存当中存储的位置不同
1.类是引用类型,存储在内存的堆中;
2.结构是值类型,存储在内存的栈中;
3.结构不支持继承。
4.结构不能有无参数构造函数
类的用途比结构的用途广,但是 较小的数据类型使用可以用结构来提高性能;
类
数据成员有 字段、常量、事件;
静态可以使用关键字static;常量关键字 const;只读字段关键字 readonly;
函数成员有 方法、属性、构造函数、终结器(finalizer)、运算符、索引器;
- 方法
方法的基本用法很简单;需要注意的特别的几个点
1.ref 关键字 是将默认传递的值类型换成 引用方式,在方法内部修改 带有ref 的参数都会改变原始对象的值;
2.out 关键字 可以不定义默认值传递参数,也是以引用方式传递 在方法内部的更改都会影响其变化;
3.重载 就是方法的名称相同但是方法的参数 数量不同或类型不同
- 终结器
终结器类似于构造函数,但是不同于构造函数,和finalize的作用相同写法不同
/// <summary>
/// 终结器
/// </summary>
~MyClass(){
//要清理的对象
} /// <summary>
/// 重写清理对象
/// </summary>
protected override void Finalize(){
try
{
//自定义清理对象
}
finally
{
base.Finalize();
}
}
匿名类型
匿名类型就是 关键字 var ;
关键字和new一起使用是可以创建匿名类型;
缺点:编译器为var 伪造了一个对象的类型,所以利用反射是得不到该对象的类型的;
结构
类中定义了封装了对象,存储在堆中,在生存周期上有很大的灵活性,但是这也降低了性能;
所以产生了结构,用于保存那些没有必要占用太多资源的较小数据;
弱引用
对于那些很大却不长访问的类,就可以使用弱引用,弱引用可以创建和使用,在垃圾回收运行是就会讲对象回收;
因为若引用可能随时被回收,所以要使用WeakReference 类来创建;
static void Main()
{
WeakReference mathreference=new WeakReference(new Users());
Users user;
if(mathreference.IsAlive)
{
user=mathreference.Target as Users;
}
}
部分类
当多个程序员编辑一个类的时候就可以使用这种办法来编辑一个类;
把一个类可以分成多个部分;
使用关键字 partial;
partial class MyClass
{
public void GetOne()
{ }
}
partial class MyClass
{
public void GetTwo()
{ }
} /// <summary>
/// 编译后
/// </summary>
partial class MyClass
{
public void GetOne()
{ }
public void GetTwo()
{ }
}
Object类
所有.NET 的类 的派生自 System.Object 。
GetHashCode(); 当对象在数据字典结构中,就可以使用这个方法;
GetType();返回对象的更多信息,包括类型,方法,属性等;
MemberwiseClone();复制对象,但是只是浅表复制,对对象内部的引用不不复制对象只是复制引用;
扩展方法
扩展方法是对一个类的另一个的扩展;
扩展方法是静态的;
public static class MyClass
{
public static void Add(this YouClass yc;decimal num)
{
yc.Value += num;
}
}
C#知识点总结【1】的更多相关文章
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
- ASP.NET MVC开发:Web项目开发必备知识点
最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...
- UWP开发必备以及常用知识点总结
一直在学UWP,一直在写Code,自己到达了什么水平?还有多少东西需要学习才能独挡一面?我想对刚接触UWP的开发者都有这种困惑,偶尔停下来总结分析一下还是很有收获的! 以下内容是自己开发中经常遇到的一 ...
- C#高级知识点&(ABP框架理论学习高级篇)——白金版
前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...
- lucene 基础知识点
部分知识点的梳理,参考<lucene实战>及网络资料 1.基本概念 lucence 可以认为分为两大组件: 1)索引组件 a.内容获取:即将原始的内容材料,可以是数据库.网站(爬虫).文本 ...
- DoraCMS 源码知识点备注
项目需要研究了下DoraCMS这款开源CMS,真心做的不错:).用的框架是常用的express 4 + mongoose,代码也很规范,值得学习. 源码中一些涉及到的小知识点备注下: https:// ...
- atitit 商业项目常用模块技术知识点 v3 qc29
atitit 商业项目常用模块技术知识点 v3 qc29 条码二维码barcodebarcode 条码二维码qrcodeqrcode 条码二维码dm码生成与识别 条码二维码pdf147码 条码二维码z ...
- HTML5知识点总结
HTML5知识点总结(一) 一.HTML新增元素 1.IE9版本以下支持HTML5的方法 <!--[if lt IE9]> <script src="http://cdn. ...
- JavaScript易错知识点整理
前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...
- Sqlserver中一直在用又经常被忽略的知识点一
已经有快2个月没有更新博客了,实在是因为最近发生了太多的事情,辞了工作,在湘雅医院待了一个多月,然后又新换了工作...... 在平时的工作中,Sqlserver中许多知识点是经常用到的,但是有时候我们 ...
随机推荐
- 【资源下载】Ext4.1.0_Doc中文版_V1.0.0_Beta正式提供下载!
*************************************************重要提示: 在2014年1月1日前一天,历时两年左右的时间,翻译小组终于完成了该API的翻译.可喜可贺 ...
- 使用EntityFramwork[6.1]进行级联保存的时候出现异常
出现的异常:System.InvalidOperationException: Multiplicity constraint violated. The role 'IncomeItem_Creat ...
- joomla3.1安装不通过Magic Quotes GPC解决方法
测试安装下joomla 3.1稳定版,但是不能成功,Magic Quotes GPC始终显示 否红色,这样就安装不了了! 要解决这个很简单,开启Magic Quotes GPC就行了,于是找到php. ...
- 基于 Markdown 的开源的 Node.js 知识库平台
Raneto 是一个免费,开源的 Node.js 知识库平台,基于静态 Markdown 文件实现. Raneto 可以被称为静态网站生成器,因为它并不需要数据库支持.所有的内容都存储在 Markdo ...
- python——第一天
两种循环: for x in …… while range(n) 生成整数序列,并且是从0开始一直到n-1的整数 raw_input() 读取的内容永远以字符串的形式,必须先用 int() 把字符串转 ...
- IT人的自我导向型学习:学习的3个维度
看到大家对我的文章赞了不少,看来大家还比较喜欢看.园子里的一些朋友和我说:”终于又看到你要在园子里发原创文章了.几年前就受益匪浅,经过几年的成长分享来的东西肯定也是精品.“ 感谢大家对我的信任,如果你 ...
- Android学习笔记之Json的使用....
PS:当你的能力还驾驭不了你的目标时,那你需要沉下心来历练... 学习内容: 1.Json的使用... 2.Json信息过滤... 3.从网络上获取Json数据... 4.解析Json数据获取各个属性 ...
- 将form表单元素转为实体对象 或集合 -ASP.NET C#
简介: 做WEBFROM开发的同学都知道后台接收参数非常麻烦 虽然MVC中可以将表单直接转为集实,但不支持表单转为 LIST<T>这种集合 单个对象的用法: 表单: <input n ...
- 说说jsonp
什么是jsonp jsonp充其量只能说是一种"方法".它可以让页面从其他域中获取资料. 首先要知道的是同源策略,在javascript中使用http请求(ajax)是会受到同 ...
- SQL语句技巧之去除重复行
去除表中重复行数据,可能大家立马就想到的是用DISINTCT关键字,但DISINTCT只能是去除表中所有列都相同的行,若碰到需要去除表中多个字段重复的行(即:部份相同,部份不相同),那么该如何做呢?我 ...