C\#익명 대상(익명 유형),var,동적 유형 다이나믹

6579 단어 c#dynamicvar
C\#의 발전 에 따라 이 언어 는 내용 이 풍부 해 지고 개발 이 더욱 편리 하고 빠 르 며 C\#의 날 카 로 움 이 뚜렷 해 졌 다.C\#언어 는 태 어 날 때 부터 강 한 유형의 언어 였 다.이런 성격 은 지금까지 변 하지 않 았 고 앞으로 도 변 하지 않 을 것 이 라 고 생각한다.강 한 유형 언어 인 만큼 모든 프로그램 을 작성 할 때 다음 과 같은 기본 조건 을 만족 시 켜 야 합 니 다.
1.변수 성명 은 그 유형 을 밝 혀 야 합 니 다.
2.변수 유형 이 명확 한 후에 그 유형 은 Runtime 에서 도 바 꿀 수 없습니다.
코드 는 다음 과 같 습 니 다:

public class Student
 {
  public string Name { get; set; }
  public int Age { get; set; }
  public string Like { get; set; }
 }
static void Main(string[] args)
{
 int a = 10;
 string s = "abc";
 Student student = new Student();
 //        ,             
 s = a;
 student = s;
 a = 10.1f;
}
그러나 실제 개발 에서 우 리 는 다음 과 같은 몇 가지 흔히 볼 수 있 는 문제 에 직면 한다.
1.비교적 큰 프로그램 에서 한 곳 만 있 거나 몇 군데(3 곳 을 초과 하지 않 음)특정한 유형(예 를 들 어 Student)을 사용 해 야 하고 다른 곳 에 서 는 이런 유형 이 필요 하지 않 습 니 다.Student 형식 을 따로 설명 합 니 다.필요 한 코드 량 은 이 유형 을 사용 할 때의 코드 량 을 초과 할 수 있 습 니 다.투입 생산 비 는 수지 가 맞지 않 습 니 다.
2.한 프로그램 에서 특정한 유형의 대상 의 일부 속성 이나 방법 만 연산 에 참여 해 야 합 니 다.이러한 상황 에서 이 유형의 대상 을 프로그램 에 필요 한 일부 속성 과 방법의 대상 으로 임시로 전환 하면 프로그램 을 더욱 간소화 할 수 있다.
3.다른 상황.................................................................
위의 C\#실제 개발 에서 흔히 볼 수 있 는 문 제 는 자바 스 크 립 트 개발 에서 비교적 좋 은 해결 방안 을 가지 고 있 습 니 다.다음 과 같 습 니 다.

//   js           
student = {"name":"  ","age":20,"like":"LOL"};
//   js           
teacher = {"name":"   ","like":"      ,  LOL"};
//       student     name age   
person = {"name":student.name,"age":student.age};
위의 js 문법 에 익숙 하지 않다 면 바 이 두 에 가서'json 문법'을 검색 하면 간단 하 다 고 알려 줄 수 있다.
익명 개체(익명 형식)
따라서 C\#3.0 버 전에 서 JavaScript 스 크 립 트 언어의 이러한 문법 적 장점 을 흡수 하여 C\#에 대해 해당 하 는 업 그 레이 드 를 하여 이런 문법 형식(C\#여전히 강 한 유형 언어)을 지원 합 니 다.예제 코드 는 다음 과 같다.

static void Main(string[] args)
{
  new {Name="  ",Age=20,Like="LOL"};
}
위의 C\#코드 는 new 키 워드 를 통 해 컴 파일 러 에 대상 을 만 들 겠 다 고 알려 줍 니 다.이 대상 은 Name,Age,Like 세 가지 속성 을 가지 고 있 습 니 다.=후 속성 에 대응 하 는 값 입 니 다.이렇게 해서 우 리 는'대상 을 만 들 려 면 먼저 해당 대상 유형의 제약 이 있어 야 한다'는 것 을 피 했 기 때문에 개발 과정 에서 비교적 적은 유형 을 사용 하 는 것 에 대해 우 리 는 별도의 유형 을 만 들 필요 가 없다.위 에서 언급 한 문제 1 이 해결 되 었 다.
현재 만 든 대상 은 구체 적 인 유형 을 지정 하지 않 아 익명 대상 이 라 고 합 니 다.
Var 등장
현재 익명 의 대상 을 사용 하려 면 변 수 를 사용 하여 참조 해 야 합 니 다.비록 우리 가 만 들 때 대상 의 종 류 를 지정 하지 않 았 지만 컴 파일 러 는 컴 파일 과정 에서 관련 속성 과 방법 을 가 진 종 류 를 만 드 는 것 을 도와 줄 것 입 니 다.이 때 컴 파일 된 형식 이름 은 무 작위 로 생 성 되 기 때문에 변수 형식 을 정할 수 없습니다.예 는 다음 과 같다.

static void Main(string[] args)
{
 //XXX     
 //x      
  XXX x = new {Name="  ",Age=20,Like="LOL"};
}
비록 우 리 는 컴 파일 러 가 생 성 한 유형의 이름 을 모 르 지만,우 리 는 컴 파일 러 가 컴 파일 된 결과 에 따라 변수 유형 을 추측 할 수 있 게 할 수 있다.이때 var 키 워드 는 역할 을 발휘 합 니 다.

static void Main(string[] args)
{
  var x = new {Name="  ",Age=20,Like="LOL"};
}
var 키워드 설명 x 의 유형 은 주어진 값 에 의 해 결정 되 고 컴 파일 러 추정 에 따라 스마트 힌트 를 줄 수 있 습 니 다.다음 그림:

var 사용 주의사항:
1.var 는 방법 내의 부분 변수 만 설명 할 수 있 습 니 다.
2.var 성명 의 변 수 는 할당 된 후에 유형 이 확정 되 고 후속 프로그램 에서 다른 유형의 값 을 부여 할 수 없습니다.
3.var x=new object()는 의미 가 없습니다.이런 코드 를 쓰 지 마 세 요.

 현재 익명 의 대상 과 var 추정 유형의 지원 이 있 으 면 위 에서 언급 한 문제 2 를 처리 할 수 있 습 니 다.예제 코드 는 다음 과 같다.

 static void Main(string[] args)
  {
   var x = new { Name = "  ", Age = 20, Like = "LOL" };
   var s = new { Name = x.Name, Age = x.Age }; 
  }
위 는 예시 일 뿐 입 니 다.만약 당신 이 Linq 나 Entity Framework 에 익숙 하 다 면,그 문제 2 에 대응 하 는 용법 은 천 지 를 뒤 덮 을 것 입 니 다.
동적 유형 다이나믹 등장
익명 유형의 사용 은 일반적으로 방법의 부분 에 국한 되 어 있 으 며,사용 에 따라 정의 되 고,사용 이 끝나 면 사라 지 는 것 으로 이해 할 수 있다.다음 과 같은 상황 이 있 으 면 어떻게 해 야 합 니까?    

 static void Main(string[] args)
  {
   var x = GetObject(); 
  }

  private static XXX GetObject()
  {
   return new { Name = "  ", Age = 20, Like = "LOL" };
  }
GetObject 방법 을 통 해 익명 의 대상 을 되 돌려 줍 니 다.따라서 값 형식 이름 을 되 돌려 줄 수 없습니다.여 기 는 잠시 XXX 로 대체 합 니 다.이 경우 되 돌아 오 는 유형 이 확실 하지 않 으 므 로 다이나믹 으로 가리 킬 수 있 습 니 다.다음 과 같다.

 static void Main(string[] args)
  {
   var x = GetObject(); 
   Console.WriteLine(x.Name);
  }
  private static dynamic GetObject()
  {
   return new { Name = "  ", Age = 20, Like = "LOL" };
  }
이 방법 은 문법 오류 가 발생 하지 않 습 니 다.프로그램 이 성공 적 으로 컴 파일 되 고 실 행 될 수 있 습 니 다.그렇다면 다이나믹 은 도대체 무엇 을 했 기 때문에 위의 프로그램 을 성공 적 으로 컴 파일 할 수 있 습 니까?
dynamic 의 역할:
1.다이나믹 은 동적 유형 을 나타 낸다.동적 유형의 의 미 는 프로그램 작성,컴 파일 단계 의 유형 이 불확실 하 다 는 것 이다.Runtime 에서 반사 체 제 를 통 해 관련 대상 의 속성 이나 방법 을 확인한다.따라서 작성 단 계 는 문법 검 사 를 하지 않 습 니 다.
2.dynamic 는 필드,속성,방법 매개 변수,방법 반환 값 을 설명 할 수 있 습 니 다.
3.dynamic 은 스마트 알림 을 지원 하지 않 습 니 다.코드 를 쓸 때 dynamic 이기 때 문 입 니 다.  뭔 지 알 수가 없어 요.
dynamic 성명 의 변 수 는 object 형식 변수 로 이해 할 수 있 습 니 다.따라서 dynamic 변수 에 모든 종류의 값 을 부여 하 는 것 이 정확 하지만 변 수 를 사용 하여 특정한 속성 값 을 얻 거나 특정한 방법 을 호출 할 때(이 때 프로그램 은 런 타임 상태 에 있 을 것 임)CLR 은 호출 된 속성 이나 방법 이 존재 하 는 지 확인 하고 실행 시 이상 이 존재 하지 않 습 니 다.
dynamic 는 Asp.net Mvc 웹 개발 에서 곳곳에서 사용 되 고 있 으 며 복잡 해 보이 지만 본질 적 으로 위 에서 말 한 내용 입 니 다.
설명:
var 와 dynamic 는 기능 이 유사 해 보이 지만 서로 다르다.
var
dynamic
 성명 필드
 ×
 √
 국부 변수
 √
 √
 방법 매개 변수 유형
 ×
 √
 방법 반환 값 형식
 ×
 √
총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 C\#익명 대상(익명 유형),var,동적 유형 dynamic 입 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기