C#的一些知識點
不能將屬性以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#的一些知識點的更多相关文章
- JavaScript基礎知識
JavaScript基礎知識 1.標籤組使用 <script charset='utf-8' //設置字元集 defet //使腳本延遲到文檔解析完成,Browser已忽略 language=' ...
- BootStrap基礎知識
BootStrap基礎知識 1. .lead //突出 .text-left //文字居左 .text-right //文字居右 .text-center //文字居中 .text-justify / ...
- CSS1-3基礎知識
CSS1-3基礎知識 1.css排版 css在html內排版: <style type='text/css'> 標記名{} .類型名{} #ID名{} 標記名,.類型名,#ID名{} &l ...
- jQuery基礎知識
jQuery基礎知識 $(function(){}) //jQuery先執行一遍再執行其他函數 $(document).ready(fn) //文檔加載完後觸發 1. 刪除$:jQuery.noCon ...
- Python开发 基礎知識 (未完代補)
一.Python基本知識 1.Python屬高階語言,所編築的是字節碼 2.一般狀態statement 終止於換行,如需使用多數行編寫,可在行末加上 \,以表延續 但在 parentheses ( ) ...
- 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 ...
- Python开发 基礎知識 3.類別&方法 (bool & str) (未完待續)
類別 可使用type()查看 內建 [ 布爾:bool (Boolen) 字串:str (String) 數字:int (Integer) 小數:float 列表:list 元祖:tuple 字典:d ...
- 最近做group assignment需要些加密的知識
需求:A給B單向發的數據需要被加密,A和B都可以看到原文.加密后,就算傳輸的過程被竊取,也無法得知數據原文.A可以是任何客戶端. 解決:常用的MD5,sha1等常用的加密算法為單向不可逆,顯然不符合需 ...
- Linux基礎知識 —— open&close
下面說一下在用戶空間調用open/close/dup跟驅動中的open和release的對應. 下面是測試驅動: #include <linux/module.h> #include &l ...
随机推荐
- 在DJANGO中如何定义get_absolute_url
有好几种办法呢... 书上有说: 常见的: class Image(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, ...
- - > 贪心基础入门讲解五——任务执行顺序
分析: 本题可以抽象成,从一个整数开始,每次减去a,再加上b (a,b都是正数),要求每次操作都不产生负数. 针对本题a[i] = R[i], b[i] = R[i] – O[i],注意O[i] &l ...
- 条款45: 弄清C++在幕后为你所写、所调用的函数
如果你没有声明下列函数,体贴的编译器会声明它自己的版本.这些函数是:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址运算符.另外,如果你没有声明任何构造函数,它也将为你声明一个缺省构造函数.所 ...
- BC #62 div1 02
/* 数位DP题,设dp[n][k][j]为前n位最后一位是k时mod为j的个数.操作都相同,可以使用矩阵加速.本来对于每一位是7*10,可以把它压向一个向量. 加速矩阵为70*70,再加一维计算前缀 ...
- Cisco路由器配置ADSL上网
cisco1841#sh run Building configuration... Current configuration : 2970 bytes ! version 12.4 service ...
- iOS: 学习笔记, Swift操作符定义
Swift操作符能够自行定义, 仅仅须要加上简单的标志符就可以. @infix 中置运算. 如+,-,*,/运算 @prefix 前置运算. 如- @postfix 后置运算. a++, a-- @a ...
- Android-通过SlidingPaneLayout高仿微信6.2最新版手势滑动返回(一)
近期更新了微信版本号到6.2.发现里面有个很好的体验,就是在第二个页面Activity能手势向右滑动返回,在手势滑动的过程中能看到第一个页面,这样的体验很赞,这里高仿了一下. 这里使用的是v4包里面的 ...
- 将canvas画布内容转化为图片(toDataURL(),创建url)
将canvas画布内容转化为图片(toDataURL(),创建url) 总结 1.现在的浏览器都支持右键另存为图片的方法来将canvas画布内容转化为图片 2.在代码里面可以通过toDataURL() ...
- 异常值检测(Detecting Outliers)
Most statistical approaches to outlier detection are based on building a probability distribution mo ...
- MSP430:管脚的第二功能选择
之前在使用PWM,AD时候用到过第二功能,不过都是copy没有注意过PXSEL究竟怎么设置,今天在设置晶振管脚时候遇到了麻烦,细致看了一下其实很简单,在SPEC的最后详细讲了每个管脚如何设置为其他功能 ...