C\#익명 대상(익명 유형),var,동적 유형 다이나믹
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 입 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.