まず最初に、「構文シュガー」という言葉は決して軽蔑的な用語ではないことを宣言しておく必要があります。これは、コンパイラが変換を行うのに役立つ便利な方法です。パフォーマンスの面で、開発とコーディングの効率が向上します。これは Java 開発者にとっては羨ましいことです (笑)。
1. 簡素化されたプロパティ
先ほど、プロパティを次のように宣言しました
sourceprint?01 プライベート文字列 _myName を表示します。
02
03 パブリック文字列 MyName
04
05 {
06
07 get { return _myName }
08
09 セット { _myName = 値 }
10
11 }
このような型にはまったステートメントを作成するのはあまり意味がありません。そのため、C# の設計者は、この型にはまった作業をコンパイラーに渡して、次のように宣言できるようになりました。
ソースプリントを表示?1 パブリック文字列 MyName { セット;
もちろん、柔軟性を犠牲にすることはありません。たとえば、get または set に対してアクセス制限を個別に設定できます。
ソースプリントを表示?1 パブリック文字列 MyName { get;
2. 2回の変更後のコミッションの書き方
.net 1.1 では、デリゲートでメソッドを使用する前にメソッドを宣言する必要がありました。.net 2.0 以降では、匿名デリゲートを使用できるようになりました。これにより、記述が簡素化されるだけでなく、後で匿名デリゲートのスコープ内の変数にアクセスできるようになります。 , Ram 式が使えるようになったので、書くのが楽になりました。
ソースプリントを表示?01 クラス MyClass
02 {
03 パブリックデリゲート void DoSomething(int a);
04
05 //メソッド委任を定義
06 プライベート void DoIt(int a) {
07 コンソール.WriteLine(a);
08 }
09
10 private void HowtoDo(DoSomething doMethod,int a) {
11 doMethod(a);
12}
13
14 public static void Main(string[] args) {
15 MyClass mc = new MyClass();
16 //定義されたメソッドデリゲートを呼び出す
17 mc.HowtoDo(new DoSomething(mc.DoIt), 10);
18 int x = 10;
19 //匿名の委任を使用する
20 mc.HowtoDo(delegate(int a){
21 Console.WriteLine(a + x);
22},10);
23
24 //ラムダ式を使用する
25 mc.HowtoDo(a=>Console.WriteLine(a+x),10);
26
27 Console.ReadLine();
28 }
29 }
3. コレクションクラス宣言
List を宣言してリストに初期値を割り当てる前に、次のように記述する必要がありました。
view sourceprint?1 List<string> list = new List<string>();
2 list.Add("a一");
3 list.Add("b二");
4 list.Add("c三");
今は必要ないので、書いてください
view sourceprint?1 List<string> list = new List<string> {
2 "デフォルト"、"OK"
3};
4. コレクションクラスの各項目に対する操作
コレクション内の項目を 1 つずつ処理するには、次のように記述する必要があります。
view sourceprint?1 foreach (リスト内の文字列項目)
2 {
3 Console.WriteLine(項目);
4}
今は必要ない、それでいい
view sourceprint?1 list.ForEach(a => Console.WriteLine(a));
コードははるかにすっきりしています。
5. == を使用して最後に試してみる
リソースの使用が終了したときにリソースを解放するために、using は本質的には try fiannaly の単なる構文糖です。例えば
ソースプリントを表示?1 StreamWriter sw = null;
2 試してみる
3 {
4 sw = 新しい StreamWriter("d:abc.txt");
5 sw.WriteLine("テスト");
6}
7 ついに {
8 if(sw!= null) sw.Dispose();
9}
上記のコードは次のように簡略化できます。
view sourceprint?1 using (var sw = new StreamWriter("d:abc.txt")) {
2 sw.WriteLine("テスト");
3}
6. かわいいヴァール
var の意味については、宣言された型を記述する必要はありません。コンパイラーは、その後の var への割り当てに基づいてその型を決定します。一度確定した var は、ローカルとしてのみ使用できます。変数であり、フィールドとして使用することはできません。
例えば:
ビューsourceprint?1 varwriter = new StreamWriter(path);
ソースプリントを表示?1 for(var i=0;i<100;i++){}
7. クエスチョンマークの進化
古い疑問符 + コロン
ソースプリントを表示?1 var b = 3;
2 var a = b > 9?b.ToString():”0”+b;
新しい赤ちゃんには疑問符が 2 つ付いています?? これは、左側の変数が null の場合、値は右側の変数であり、それ以外の場合は左側の変数の値であることを意味します。
ソースプリントを表示?1 文字列 a = null;
2 var b = a??"";
8. 型のインスタンス化のための糖衣構文
ソースプリントを表示?1 パブリック クラス Abc
2 {
3 パブリック int ID { セット;
4
5 パブリック文字列名 { セット;
6
7 パブリック文字列 URL { セット;
8}
上記のクラスのコンストラクターを宣言していませんが、次のようにインスタンス化できます。
ソースプリントを表示?1 public static void Main(string[] args) {
2 var abc = 新しい Abc{
3ID=1、
4 名前=「ユカイジャオ」、
5 URL=" http://yukaizhao.cnblogs.com/ "
6};
7}
9. 伝説的な拡張メソッド
拡張メソッドは C# 3.5 で導入されました。クラスのソース コードを変更せずにクラスにインスタンス メソッドを追加できることは非常に意味があります。その本質は糖衣構文の実装でもあります。
たとえば、IsNumber メソッドを使用して String クラスを拡張します。
ソースプリントを表示?01 public static class StringExt {
02 static private Regex regexNumber = new Regex(" \d +");
03 static public bool IsNumber(この文字列入力)
04 {
05 if (string.IsNullOrEmpty(入力))
06 {
07 偽を返します。
08 }
09 正規表現番号を返します。IsMatch(入力);
10}
11 }
String インスタンスでこのメソッドを呼び出すことができます
ソースプリントを表示?1 var abc = “123”;
2 var isNumber = abs.IsNumber();
10.匿名クラスを使用する
ソースプリントを表示?1 var a = new {
2 ID = 1、名前=”yukaizhao”、BlogUrl=”http://www.cnblogs.com/yukaizhao/”
3};
匿名クラスは、linq のクエリ データを SQL またはエンティティ フレームワークに返すときに便利です。
さらに糖衣構文がある場合は、共有してください。同時に、シンタックス シュガーは私たちに便利さをもたらしてくれるので、皆さんにも楽しんでいただければと思います。嘲笑しないでください。嘲笑する必要もありません。
http://www.cnblogs.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html