우선, "syntactic sugar"라는 단어가 결코 경멸적인 용어가 아니라는 점을 선언해야 합니다. 이는 편리한 작성 방법이기도 합니다. 성능 측면에서 개발 및 코딩의 효율성을 향상시킵니다. 이게 자바 개발자들을 부러워하게 만드네요. 하하.
1. 단순화된 속성
이전에 우리는 다음과 같이 속성을 선언했습니다.
sourceprint 보기?01 개인 문자열 _myName;
02
03 공개 문자열 MyName
04
05 {
06
07 get { return _myName }
08
09 설정 { _myName = 값 }
10
11 }
이와 같은 진부한 진술을 만드는 것은 별로 의미가 없으므로 C#의 디자이너는 이 진부한 작업을 우리를 위해 컴파일러에 넘겼습니다. 이제 우리는 이것을 이렇게 선언할 수 있습니다.
sourceprint 보기?1 공개 문자열 MyName { 설정 }
물론 유연성을 희생하지는 않습니다. 예를 들어 get 또는 set에 대한 액세스 제한을 별도로 설정할 수 있습니다.
sourceprint 보기?1 공개 문자열 MyName { 보호된 내부 세트 }
2. 2번의 변경 후 커미션 작성 방식
.net 1.1에서는 대리자에서 메서드를 사용하기 전에 이를 선언해야 했습니다. .net 2.0 이후에는 익명 대리자를 사용할 수 있습니다. 이는 작성을 단순화할 뿐만 아니라 나중에 익명 대리자의 범위 내 변수에 액세스할 수 있게 해줍니다. , 램 이제 표현이 가능해져서 글쓰기가 쉬워졌습니다.
sourceprint 보기?01 class MyClass
02 {
03 공개 위임 void DoSomething(int a);
04
05 //메소드 위임 정의
06 개인 무효 DoIt(int a) {
07 Console.WriteLine(a);
08 }
09
10 private void HowtoDo(DoSomething doMethod,int a) {
11 doMethod(a);
12}
13
14 공개 정적 무효 Main(string[] args) {
15 MyClass mc = 새로운 MyClass();
16 //정의된 메서드 대리자 호출
17 mc.HowtoDo(new DoSomething(mc.DoIt), 10);
18 정수 x = 10;
19 //익명 위임 사용
20 mc.HowtoDo(delegate(int a){
21 Console.WriteLine(a + x);
22},10);
스물셋
24 //람다 표현식 사용
25 mc.HowtoDo(a=>Console.WriteLine(a+x),10);
26
27 콘솔.ReadLine();
28 }
29 }
3. 컬렉션 클래스 선언
목록을 선언하고 목록에 초기 값을 할당하기 전에 다음과 같이 작성해야 했습니다.
view sourceprint?1 List<string> list = new List<string>();
2 list.Add("a一");
3 목록.Add("b두");
4 list.Add("c삼");
이제 필요없어 그냥 쓰세요
view sourceprint?1 List<string> 목록 = 새 List<string> {
2 "결정","확인"
3};
4. 컬렉션 클래스의 각 항목에 대한 작업
컬렉션의 항목을 하나씩 처리하려면 다음과 같이 작성해야 합니다.
view sourceprint?1 foreach(목록의 문자열 항목)
2 {
3 Console.WriteLine(항목);
4}
이제 필요없어 괜찮아
view sourceprint?1 list.ForEach(a => Console.WriteLine(a));
코드가 훨씬 깔끔해졌습니다.
5. ==를 사용하여 마지막으로 시도
사용이 끝나면 리소스를 해제하기 위해 종종 using을 사용합니다. Using는 본질적으로 try fiannaly의 구문 설탕일 뿐입니다. 예를 들어
sourceprint 보기?1 StreamWriter sw = null;
2번 시도
3 {
4 sw = new StreamWriter("d:abc.txt");
5 sw.WriteLine("테스트");
6}
7 마침내 {
8 if(sw!= null) sw.Dispose();
9}
위의 코드는 다음과 같이 단순화될 수 있습니다.
(var sw = new StreamWriter("d:abc.txt")) {를 사용하여 sourceprint를 봅니다.
2 sw.WriteLine("테스트");
3}
6. 귀여운 var
var의 의미를 위해 선언된 유형을 작성할 필요가 없습니다. 컴파일러는 var에 대한 후속 할당을 기반으로 해당 유형을 결정합니다. var의 유형이 확인되면 변경할 수 없습니다. 변수이며 필드로 사용할 수 없습니다.
예를 들어:
sourceprint 보기?1 varwriter = new StreamWriter(path);
sourceprint 보기?1 for(var i=0;i<100;i++){}
7. 물음표의 진화
이전 물음표 + 콜론
소스 인쇄 보기?1 var b = 3;
2 var a = b > 9?b.ToString():”0”+b;
New baby에는 두 개의 물음표??가 있는데, 이는 왼쪽 변수가 null이면 값은 오른쪽 변수의 값이고, 그렇지 않으면 왼쪽 변수의 값이라는 의미입니다.
소스 인쇄 보기?1 문자열 a = null;
2 var b = a??"";
8. 유형 인스턴스화를 위한 구문 설탕
소스 인쇄 보기?1 공개 클래스 ABC
2 {
3 공개 정수 ID { 설정 }
4
5 공개 문자열 이름 { get }
6
7 공개 문자열 Url { get }
8}
위 클래스의 생성자를 선언하지 않았지만 다음과 같이 인스턴스화할 수 있습니다.
sourceprint 보기?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 클래스를 확장합니다.
sourceprint 보기?01 공개 정적 클래스 StringExt {
02 static private Regex regexNumber = new Regex(" \d +");
03 static public bool IsNumber(이 문자열 입력)
04 {
05 if (string.IsNullOrEmpty(입력))
06 {
07 거짓을 반환;
08 }
09 return regexNumber.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