백엔드 개발 C#.Net 튜토리얼 C# 일반 매개변수 변환에 대한 자세한 소개

C# 일반 매개변수 변환에 대한 자세한 소개

Mar 07, 2017 am 11:03 AM

이 기사에서는 좋은 참조 값을 갖는 C# 일반 매개변수 변환에 대한 관련 지식을 소개합니다.

제네릭의 다양한 매개변수 유형에 의해 생성된 개체는 독립적입니다. 서로.

//如
Tuple<string> ts;
Tuple<object> to;
//ts to 是两个类型的对象。
로그인 후 복사

=ts 연산을 구현하고 싶은 경우가 많은데 왜일까요? 그래야 할 것 같으니까요.

이 목표를 달성하려면 "일반 매개변수 변환 문제"를 해결해야 합니다. 이 문제의 지식 포인트는 in out generic 변형입니다. 솔직히 말해서 문제 자체는 어렵지 않고 단지 매우 직관적이지 않고 잊어버리기 쉽습니다.

우선 = ts를 실현하기 위해서는 실제로 전제 조건이 있습니다. 즉, 이 매개변수는 "반환 유형"에서만 사용할 수 있습니다.

//如
delegate object FuncObj();
FuncObj func = ()=>"string";
로그인 후 복사

문자열을 객체로 변환할 수 있으므로 func는 성공합니다. "사용자"가 func를 호출할 때, 그가 얻고자 하는 것은 객체 객체이고, string도 객체 객체이므로 문제가 없습니다.

여기서 핵심은 '사용자' 관점에서 문제를 분석하는 방법을 배우는 것입니다.

//A
delegate void FuncObj2(object obj);
FuncObj2 func2 = (string str)=>{};
//B
delegate void FuncStr(string str);
FuncStr func3 = (object obj)=>{};
로그인 후 복사

이 두 코드 세트를 분석해 보세요. 어느 것이 더 합리적인가요?

사용자 입장에서는 func2와 func3을 사용합니다

사용자가 func2를 사용할 때 전달되는 객체는 객체여야 하지만 실제 처리되는 함수는 (string)=> { }, 객체를 문자열로 변환할 수 없으므로 매우 무리합니다.

사용자가 func3을 사용할 때 전달되는 객체는 문자열만 가능하지만 실제 처리되는 함수는 (object)=>{}입니다. 문자열을 객체로 변환할 수 있으므로 합리적입니다.

물론, 이 두 코드 세트는 함수 매개변수 유형이 일치하지 않기 때문에 유효하지 않습니다.

그러나 제네릭은 유형이 일치하지 않는 객체를 암시적으로 변환하는 방법을 제공합니다! 구현하는 논리는 위에서 분석되었습니다.

//out 修饰返回类型
delegate ResultType FuncOut<out ResultType>();
//in 修饰参数类型
delegate void FuncIn<in ParamType>(ParamType param);
//这是一开始我们想做到的目标
FuncOut<object> fun4 = () => "string";
//这个效果恰好相反
FuncIn<object> funcobj = (object obj) => { };
FuncIn<string> fun5 = funcobj;
//注意,泛型变体一般只能和泛型变体之间隐式转换
//lambda表达式会自动转换成参数相同的泛型变体,但无法接着做变体之间的隐式转换,所以需要funcobj来过渡
로그인 후 복사

out은 반환 유형을 수정하고, in은 매개변수 유형을 수정합니다. 이는 매우 명확하지만, 정확히 일반 in 매개변수에 주의하세요. out 매개변수의 반대입니다.

처음에는 to = ts를 구현하려고 했지만 문제의 절반만 보았습니다. 실제로 제네릭에서는 ts = to의 가능성이 있습니다.

요약:

out : to = ts;
in : ts = to;
로그인 후 복사

수정 없음: to, ts는 완전히 독립적입니다.

--------------- (비고)------------- ---
out 매개변수: 반환 유형에만 사용할 수 있습니다.

in 매개변수: 매개변수에서만 사용할 수 있습니다.

수정 없음: 모든 위치.

---------------(참고 2)------------- -----------------

In 및 Out 일반 매개변수는 대리자 및 인터페이스에서만 사용할 수 있습니다.

//综合运用
delegate ResultType FuncInOut<in ParamType, out ResultType>(ParamType param);
FuncInOut<object, string> funcobj2 = (object obj) => "string";  
FuncInOut<string, object> func6 = funcobj2;
로그인 후 복사

위 내용은 C# 일반 매개변수 변환에 대한 자세한 소개입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!



본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C#을 사용한 Active Directory C#을 사용한 Active Directory Sep 03, 2024 pm 03:33 PM

C#을 사용한 Active Directory 가이드. 여기에서는 소개와 구문 및 예제와 함께 C#에서 Active Directory가 작동하는 방식에 대해 설명합니다.

C#의 난수 생성기 C#의 난수 생성기 Sep 03, 2024 pm 03:34 PM

C#의 난수 생성기 가이드입니다. 여기서는 난수 생성기의 작동 방식, 의사 난수 및 보안 숫자의 개념에 대해 설명합니다.

C# 데이터 그리드 보기 C# 데이터 그리드 보기 Sep 03, 2024 pm 03:32 PM

C# 데이터 그리드 뷰 가이드. 여기서는 SQL 데이터베이스 또는 Excel 파일에서 데이터 그리드 보기를 로드하고 내보내는 방법에 대한 예를 설명합니다.

C#의 팩토리얼 C#의 팩토리얼 Sep 03, 2024 pm 03:34 PM

C#의 팩토리얼 가이드입니다. 여기서는 다양한 예제 및 코드 구현과 함께 C#의 계승에 대한 소개를 논의합니다.

멀티 스레딩과 비동기 C#의 차이 멀티 스레딩과 비동기 C#의 차이 Apr 03, 2025 pm 02:57 PM

멀티 스레딩과 비동기식의 차이점은 멀티 스레딩이 동시에 여러 스레드를 실행하는 반면, 현재 스레드를 차단하지 않고 비동기식으로 작업을 수행한다는 것입니다. 멀티 스레딩은 컴퓨팅 집약적 인 작업에 사용되며 비동기식은 사용자 상호 작용에 사용됩니다. 멀티 스레딩의 장점은 컴퓨팅 성능을 향상시키는 것이지만 비동기의 장점은 UI 스레드를 차단하지 않는 것입니다. 멀티 스레딩 또는 비동기식을 선택하는 것은 작업의 특성에 따라 다릅니다. 계산 집약적 작업은 멀티 스레딩을 사용하고 외부 리소스와 상호 작용하고 UI 응답 성을 비동기식으로 유지 해야하는 작업을 사용합니다.

C#의 패턴 C#의 패턴 Sep 03, 2024 pm 03:33 PM

C#의 패턴 가이드. 여기에서는 예제 및 코드 구현과 함께 C#의 패턴 소개 및 상위 3가지 유형에 대해 설명합니다.

C#의 소수 C#의 소수 Sep 03, 2024 pm 03:35 PM

C#의 소수 가이드. 여기서는 코드 구현과 함께 C#의 소수에 대한 소개와 예를 논의합니다.

C# vs. C : 역사, 진화 및 미래 전망 C# vs. C : 역사, 진화 및 미래 전망 Apr 19, 2025 am 12:07 AM

C#과 C의 역사와 진화는 독특하며 미래의 전망도 다릅니다. 1.C는 1983 년 Bjarnestroustrup에 의해 발명되어 객체 지향 프로그래밍을 C 언어에 소개했습니다. Evolution 프로세스에는 자동 키워드 소개 및 Lambda Expressions 소개 C 11, C 20 도입 개념 및 코 루틴과 같은 여러 표준화가 포함되며 향후 성능 및 시스템 수준 프로그래밍에 중점을 둘 것입니다. 2.C#은 2000 년 Microsoft에 의해 출시되었으며 C와 Java의 장점을 결합하여 진화는 단순성과 생산성에 중점을 둡니다. 예를 들어, C#2.0은 제네릭과 C#5.0 도입 된 비동기 프로그래밍을 소개했으며, 이는 향후 개발자의 생산성 및 클라우드 컴퓨팅에 중점을 둘 것입니다.

See all articles