老規矩,在開始之前老周先講個故事。
話說公元2015年7月20日,VS 2015發布。於是,肯定有人會問老周了,C#6有啥新特性,我學不來啊。學不來的話你應該檢討。老周比較保守地計算一下,學會C# 6只需要20秒,不信的話,老周筆划筆划一下,你就明白了。
1、屬性自動初始化。在4.0中引入了這樣聲明屬性:
public int VVVV { get; set;}
以前是屬性包裝一個字段,在初始化屬性時只要對字段賦值即可,這個省略的語法自然要考慮到初始化的問題,在構造函數中初始化盡管是可以,但不夠簡練,所以很自然地會出現:
public int VVVV { get; set; } = 1000;
所以,這個屬性初始化的表達式不用學,就和普通變量賦值一樣。
2、新的字符串格式化。以前是 abc {0} cccc {1},格式化占位符是用序號的,從0開始,依此類推。現在可以這樣:
$"abc {x} ccc {y}",這樣就把序號也忽略了,直接把對應的變量作為占位符就行了,為了和過去的序號占位符區別,前面加了個$符號。
3、索引初始化,比如初始化字典類型,可以這樣:
new Dictionary<int, string> {
[7] = "seven",
[9] = "nine",
[13] = "thirteen"
};
這個也不難記,和JSON很像,不過JSON是用冒號(:)來表示字段/屬性賦值的,C#團隊很聰明,不用冒號,還是用回=號,因為=號就是萬能的賦值運算符,所以,實際上是下面代碼的省略:
d[7] = "seven"
賦值語法和變量賦值語法統一,這樣不容混淆。
4、屬性和方法可以寫成Lambda表達式。比如這樣
public string NID () => "Hi, " + mName;
只要你以前Lambda表達式學得好的話,一看就明白 () => ... 是返回字符串,然后前面的public string NID的聲明顯然是一個屬性,於是把兩者合起來就是一個只讀屬性。相當於:
get{ return "Hi, " + mName; }
對於方法聲明也是如此:
private int DoSome(int a, int b) => a+b;
相當於:
private int DoSome(int a, int b)
{
return a+b;
}
和Func<int,int,int>委托所配置的Lambda表達式一樣。
所以說,你lambda基礎過關的話,以上這些都是小玩意兒。
5、非空檢查。比如,test?.ToString();如果test為null就不執行代碼,在4.0中有
bool? b;
int x;
int b= x ?? 100;
如果你對以前的這些基礎扎實的話,這個?基本不用學。
注意:如果你和老周一樣,正使用Windows 10 SDK工具,那么就要等到29號,SDK正式發布后,才能裝VS2015正式版,這幾天,咱們還是繼續體驗RC版吧。
好了,你自己惦量一下,是不是20秒就能搞定?
=======================================================
故事講完了,大家不需要鼓掌。上一篇爛文中曾說過從本文起給大家介紹一下面向Win 10 app的Toast通知和操作中心相關的內容。當然了,目前官方的文檔還不完整,因為SDK還未最終發布,故老周所講的這些內容僅作參,不過,正式版應該不會有太大出入,頂多是對通知的XML文檔做一些規范性處理。
首先要說明的是,在以前8.1時候的Toast通知方式,到了Win 10中依然支持,而且UWP API中也包括了對應的API協定。所以,你仍然可以使用8.1的通知方式,即通過ToastNotificationManager.GetTemplateContent(ToastTemplateType)方法來獲取對應的通知模板,然后用XmlDocument對象來加載和修改XML,當然你也可以直接構造XML文檔,然后用XmlDocument對象來加載。
還有就是操作中心,其實它和Toast是一伙的,即我們不需要用專門的API去操作它,因為Toast通知本身就可以顯示在操作中心里面。
到了Win10 app,Toast通知的模板不再划分為N多種,而只有一種,統一命名為ToastGeneric,也就是通用型通知,這種新的Toast通知也稱Adaptive Toast通知,就翻譯為自適應吧。
整個XML文檔的結構如下:
<toast> <visual> <binding> <text>.....</text> ........ <image ... /> ........ </binding> </visual> <audio /> <actions> <input id="snoozeTime" type="selection" defaultSelection="10"> ........ </input> <action ...> <action .....> </actions> </toast>
根節點當然是toast的了,這個沒什么可以解釋的,就像磁貼通知的根節點是tile一樣。
根節點下包含兩個家伙,實際上這兩哥們兒已經把toast通知的界面結構描述出來了。
第一部分:visual,就是通知的內容區域,可以包含文本和圖像。
第二部分:actions,即在通知的下方可以顯示按鈕、輸入框、下拉選擇列表這些可以讓用戶操作的控件。就像WP10中的快速回復短信一樣。收到短信后,會在手機屏幕頂部顯示toast通知,然后用戶點一下下拉符號,可以直接在toast通知上輸入回復信息,然后發送。
在Toast元素下,還有一個audio元素,用來配置顯示Toast通知時的聲音,audio元素的使用和8.1一樣。
Visual元素下需要放一個binding元素,這和以前一樣。而重點是binding元素的template屬性,這個跟以前不同,在UWP應用中,template統一叫做“ToastGeneric”,你不用再去考慮用哪個模板了,現在就一個名字。
同樣地,binding元素下面可以包含兩個元素:
<text>:表示一行文本,兩個text元素則表示兩行文本,三個就表示三行,通常第一個text元素作為通知的標題。至於說最多能添加多少個text元素,現在還不能確定,通常不會超個四行,畢竟通知內容不應太長。如果想在通知的內容中添加空白行,可以直接寫一個<text />(空的text元素)。
<image>:表示一個圖像。其他屬性和8.1一樣,我這里重點說一下兩個新的屬性。
>> a、placement,這是可選屬性,如果設置為inline,則表示圖像和文本內聯到一起;如果設置為appLogoOverride,就把應用的默認圖標替換,圖像顯示在通知的左上角。
另外,官方博客里有這么一句話:You can have up to 1 image for each placement value. placement屬性的各個取值只能出現一次,如果有一個image元素的placement屬性為inline,那么如果通知中還有image元素,那另外的元素的placement屬性只能為appLogoOverride了。
>> b、hint-crop,這也是個可選的屬性,默認值為none,如果設置為circle,則圖標會變成圓形,如果你習慣於正方形圖標,那就不要設置這個屬性了。
好了,不講太多了,免得大家吸收不了。關於actions就留到下一篇爛文再說吧。下面給大家直觀地展示一下新Toast通知吧。
先給大家演示一個帶有三行文本和一個圖像的Toast通知。看代碼:
string xml = "<toast lang=\"zh-CN\">" + "<visual>" + "<binding template=\"ToastGeneric\">" + "<text>高端應用</text>" + "<text>看,桃花開了。</text>" + "<image placement=\"inline\" src=\"ms-appx:///Assets/1.jpg\" />" + "<text>這桃花好看吧?</text>" + "</binding>" + "</visual>" + "</toast>"; // 創建XML文檔 XmlDocument doc = new XmlDocument(); // 加載XML doc.LoadXml(xml); // 創建通知實例 ToastNotification notification = new ToastNotification(doc); // 顯示通知 ToastNotifier nt = ToastNotificationManager.CreateToastNotifier(); nt.Show(notification);
得到的Toast通知如下圖所示。
然后打開通知中心,會看到該通知,點擊通知下方的“向下”箭頭,可以看到通知的全部內容。
如果通知顯示不出來,請檢查設置里面是否開啟應用通知。如下圖。
想不想看看在手機上運行如何?
打開手機的通知中心,也可以看到剛才的通知。
下面看看純文本的Toast通知。
string xml = "<toast lang=\"zh-CN\">" + "<visual>" + "<binding template=\"ToastGeneric\">" + "<text>來兩句</text>" + "<text>風聲,雨聲,讀書聲,聲聲入耳</text>" + "<text>國事,家事,天下事,事事關心</text>" + "</binding>" + "</visual>" + "</toast>"; // 創建XML文檔 XmlDocument doc = new XmlDocument(); // 加載XML doc.LoadXml(xml); // 創建通知實例 ToastNotification notification = new ToastNotification(doc); // 顯示通知 ToastNotifier nt = ToastNotificationManager.CreateToastNotifier(); nt.Show(notification);
通知效果如下。
示例源碼下載地址:http://files.cnblogs.com/files/tcjiaan/newToastnotificationApp.zip