不能將屬性以ref或out的方式傳遞

看上去屬性和字段差不多,可是屬性本質上是個方法,并不是真正指向一個内存位置,所以不能像字段那樣能以ref或out方式傳遞。

Lookup運行一個鍵對應多個值,但無法直接創建,衹能通過ToLookup方法

 

原生的值類型調用ToString方法是不會裝箱的

比較"Age = " + 3.ToString()和"Age = " + 3,前者要比後者高效,因爲後者默認會裝箱。所以值類型涉及字符串操作時,應該總是使用ToString方法

 

用R格式化字符串,可以保留精度

const double number = 1.618033988749895;

            string text = string.Format("{0}", number);
double result = double.Parse(text); bool same = result == number; text = string.Format("{0:R}", number);
result = double.Parse(text);
same = result == number;

前一個same爲false,后一個爲true

 

類型的協變和逆變

衹有接口和委托才能聲明這兩個特性,汎型類是不支持的(出於類型安全的考慮)。

協變用out來修飾,針對的是返回值,潛臺詞是:如果能返回父類,自然也能返回子類。

// Covariance.

IEnumerable<string> strings = new List<string>();

IEnumerable<object> objects = strings;

逆變用in來修飾,針對的是參數,潛臺詞是:如果能傳入父類,自然也能傳入子類。

// Contravariant.

IComparer<object> objects = objectComparer;

IComparer<string> strings = objects;

 

衹讀字段無法直接賦值修改,但可以通過反射進行修改

 

匿名類型的屬性是衹讀的;元祖類型的屬性也是衹讀的

這樣是爲了防止匿名對象的HashCode發生改變

 

dynamic類型可以隱式轉換爲其它類型,object則不行

如:dynamic d = 1; int i = d;

編譯器認爲dynamic上的任何操作都是合法的

 

字段内聯初始化衹是一種簡化寫法,實際上初始化還是在構造函數中進行的

這也是爲什麽值類型不允許字段内聯初始化的原因,因爲值類型不允許無參構造函數

 

Lazy<T>實現延遲加載,調用其Value屬性時才會真正加載

 

不要定義值類型的靜態構造器,因爲CLR未必會調用

struct MyStruct
{
static MyStruct()
{
//不會被調用
Console.WriteLine("MyStruct");
} public int X;
} MyStruct[] array = new MyStruct[2];
array[0].X = 2;

 

閉包

捕獲變量是從變量聲明就開始了,而捕獲的值是看調用委托時該變量是什麽值           
    var list = new List<Action>();

            for (int i = 0; i < 5; i++)

            {

                int cnt = i * 10;

                list.Add(delegate

                {

                    Console.WriteLine(cnt);

                    cnt++;

                });

            }

            list[0]();

            list[0]();

            list[1]();

有5次循環,cnt被聲明了5次,實際上就是有5個不同的捕獲變量,所以各個委托有各自獨立的捕獲值,輸出結果是0,1,10

但如果把變量聲明放在循環外,隻聲明一次:

    int cnt;

            for (int i = 0; i < 5; i++)

            {

                cnt = i * 10;

那麽這些委托就共享同一個捕獲變量,而當委托方法調用時,由於cnt已經被循環了5次,成爲40,所以輸出結果是40,41,42

C#的一些知識點的更多相关文章

  1. JavaScript基礎知識

    JavaScript基礎知識 1.標籤組使用 <script charset='utf-8' //設置字元集 defet //使腳本延遲到文檔解析完成,Browser已忽略 language=' ...

  2. BootStrap基礎知識

    BootStrap基礎知識 1. .lead //突出 .text-left //文字居左 .text-right //文字居右 .text-center //文字居中 .text-justify / ...

  3. CSS1-3基礎知識

    CSS1-3基礎知識 1.css排版 css在html內排版: <style type='text/css'> 標記名{} .類型名{} #ID名{} 標記名,.類型名,#ID名{} &l ...

  4. jQuery基礎知識

    jQuery基礎知識 $(function(){}) //jQuery先執行一遍再執行其他函數 $(document).ready(fn) //文檔加載完後觸發 1. 刪除$:jQuery.noCon ...

  5. Python开发 基礎知識 (未完代補)

    一.Python基本知識 1.Python屬高階語言,所編築的是字節碼 2.一般狀態statement 終止於換行,如需使用多數行編寫,可在行末加上 \,以表延續 但在 parentheses ( ) ...

  6. HTML 4.01+5基礎知識

    HTML 4.01+5 1.Html結構:html>head+body 2.Html快捷鍵:!加Tab(在sublime中) 3.雙標籤: ①常用標籤 h1.h2.h3.h4.h5.h6 p.c ...

  7. Python开发 基礎知識 3.類別&方法 (bool & str) (未完待續)

    類別 可使用type()查看 內建 [ 布爾:bool (Boolen) 字串:str (String) 數字:int (Integer) 小數:float 列表:list 元祖:tuple 字典:d ...

  8. 最近做group assignment需要些加密的知識

    需求:A給B單向發的數據需要被加密,A和B都可以看到原文.加密后,就算傳輸的過程被竊取,也無法得知數據原文.A可以是任何客戶端. 解決:常用的MD5,sha1等常用的加密算法為單向不可逆,顯然不符合需 ...

  9. Linux基礎知識 —— open&close

    下面說一下在用戶空間調用open/close/dup跟驅動中的open和release的對應. 下面是測試驅動: #include <linux/module.h> #include &l ...

随机推荐

  1. [bzoj2097][Usaco2010 Dec]Exercise 奶牛健美操_贪心_树形dp_二分

    Exercise bzoj-2097 Usaco-2010 Dec 题目大意:题目链接 注释:略. 想法:题目描述生怕你不知道这题在考二分. 关键是怎么验证?我们想到贪心的删边. 这样的策略是显然正确 ...

  2. T1082 线段树练习3 codevs

    http://codevs.cn/problem/1082/ 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 ...

  3. Ubuntu 16.04禁用来宾账号(Guest User)

    1.打开50-ubuntu.conf sudo vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 2.在最后加入 allow-guest=fal ...

  4. 15、Java并发性和多线程-线程通讯

    以下内容转自http://ifeve.com/thread-signaling/: 线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 例如,线程B可以等待线程 ...

  5. java 中public 类

    java 中的文件名是以这个文件里面的public 的那个类命名的(也就是说文件名和这个文件里面的那个public 属性的class 名称一样), 同一个文件中不能放多个(超过2个)的pulic 类. ...

  6. 递归,迭代,堆栈三种方式实现单链表反转(C++)

    #author by changingivan# 2016.04.12#include <iostream> #include <stack> using namespace ...

  7. SQL SERVER学习笔记:临时表与表变量

    本文主要摘自徐海蔚的<Microsoft SQL SERVER企业级平台管理实践> 表变量可以作为存储过程的返回参数,而临时表不行.(存疑?表值参数只在SQL SERVER2008才开始支 ...

  8. Android TP(三)【转】

    本文转载自:http://blog.csdn.net/bi511304183/article/details/9303259 平台信息:内核:linux2.6/linux3.0系统:android/a ...

  9. cookie domain and cookie path

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie Domain=<domain-value> Opt ...

  10. 二分查找法(binary search)

    二分查找法:一种在有序列表中查找某个值的算法,它每次都将待查找的空间分为两半,在其中一般继续查找. 使用二分查找的前提是:已经排序好的列表.否则,sum对其查找的结果不做保证. 代码实现: // 使用 ...