C #에서 is
와 as
키워드 의 차이점을 알려주세요 .
C #에서 is
와 as
키워드 의 차이점을 알려주세요 .
답변:
is
운영자 점검 목적은 특정 형태로 전송할 수있는 경우.
예:
if (someObject is StringBuilder) ...
as
운영자 시도는 특정 유형에 개체를 캐스팅하고, 실패하면 NULL을 반환합니다.
예:
StringBuilder b = someObject as StringBuilder;
if (b != null) ...
관련 항목 :
캐스트 연산자의 시도는 특정 유형에 개체를 캐스팅하고 실패 할 경우 exeption를 throw합니다.
예:
StringBuilder b = (StringBuilder)someObject.
is
개체를 특정 유형으로 캐스팅 할 수 있는지 확인하지 않습니다. 정수는 긴 벌금으로 캐스트되지만 10 is long
거짓입니다.
(long)some_integer
실패? 나는 그것을 실행하지 않고서는 그것이 사실이 아니라는 것을 우리 둘 다 알고 있다고 확신하므로 당신이 의미하는 바를 설명하십시오.
is
" (가) 있습니다 입니다 . 운영자는 참조 변환, 권투 변환 및 언 박싱 변환을 고려 등이 고려되지 않은 사용자 정의 변환과 같은 다른 변환. "(msdn.microsoft.com/en-us/library/scekt9xw .aspx). 정보as
" 참고 그 뿐만 .. 운영자만을 수행 기준 전환 널 전환 복싱 전환 같은 대신 캐스트 식을 사용하여 수행되어야하는 사용자 정의 변환과 같은 다른 변환을 수행 할 수 연산자로 "( MSDN .microsoft.com / en-us / library / cscsdfbt.aspx )
IS 와 As 의 차이점은 ..
IS -Is 연산자는 지정된 유형을 가진 객체의 호환성을 확인하는 데 사용되며 결과를 부울 (True 또는 False)로 반환합니다.
AS -As 연산자는 객체를 주어진 유형 또는 클래스로 캐스팅하는 데 사용됩니다.
전의.
Student s = obj as Student;
다음과 같습니다.
Student s = obj is Student ? (Student)obj : (Student)null;
is
및 as
키워드는 모두 C #의 형식 캐스팅에 사용됩니다.
두 키워드의 IL 코드를 살펴보면 쉽게 차이를 알 수 있습니다.
C # 코드 :
BaseClass baseclassInstance = new DerivedClass();
DerivedClass derivedclassInstance;
if (baseclassInstance is DerivedClass)
{
derivedclassInstance = (DerivedClass)baseclassInstance;
// do something on derivedclassInstance
}
derivedclassInstance = baseclassInstance as DerivedClass;
if (derivedclassInstance != null)
{
// do something on derivedclassInstance
}
IL 코드 (위의 C # 코드는 첨부 된 이미지에 있음) :
is
키워드 사용을
위한 IL 코드 에는 isinsta
및 castclass
.
그러나 as
키워드 사용을 위한 IL 코드 에는 isinsta
.
위에서 언급 한 사용법에서 is
키워드가 사용되는 곳에서는 두 번의 타입 캐스트가 발생하고 키워드가 사용되는 곳에서는 하나의 타입 캐스트 만 발생 as
합니다.
참고 : is
키워드를 사용하여 일부 조건을 확인하고 typecast 결과에 관심이없는 경우 typecast가 하나만 있습니다.
if (baseclassInstance is DerivedClass)
{
// do something based on the condition check.
}
is
그리고 as
키워드는 필요에 따라 사용됩니다.
is 키워드는 왼쪽에있는 값이 오른쪽에있는 유형의 인스턴스인지 확인합니다. 예를 들면 :
if(obj is string)
{
...
}
이 경우 obj를 문자열로 가져 오려면 추가 명시 적 캐스트를 사용해야합니다.
as 키워드는 nullable 형식을 캐스팅하는 데 사용됩니다. 지정된 값이 지정된 유형의 인스턴스가 아닌 경우 null이 반환됩니다. 예를 들면 :
string str = obj as string;
if(str != null)
{
...
}
나는 말하고 싶다 : MSDN 온라인을 읽으십시오.
is 연산자는 객체가 주어진 유형과 호환되는지 여부를 확인하고 평가 결과는 부울 (true 또는 false)입니다.
as 연산자는 예외를 발생시키지 않습니다.
캐스트 인 Is operator는 성공하면 true를 반환합니다. 캐스트가 실패하면 false를 반환합니다. 그것으로 변환 된 변수를 캡처 할 수 없습니다. 이 연산자는 if 문과 표현식에서 유형을 확인할 때 가장 유용합니다. is-cast는 결과 변수가 더 이상 사용되지 않는 경우에만 이상적입니다.
캐스트 그대로입니다. 이를 통해 성능을 얻고 캐스트가 유효하지 않을 때 예외를 피할 수 있습니다. 캐스트가 불가능한 경우 Null이 반환됩니다. 참조 유형의 경우 캐스트가 권장됩니다. 빠르고 안전하며 결과 변수를 null에 대해 테스트 한 다음 사용할 수 있습니다. 이것은 여분의 캐스트를 제거합니다
is OPERATOR C #의 is 연산자는 개체 유형을 확인하는 데 사용되며 bool 값을 반환합니다. 개체가 동일한 유형이면 true이고 그렇지 않으면 false입니다. 또는 "is"연산자는 개체의 런타임 유형이 주어진 유형과 호환되는지 여부를 확인하는 데 사용됩니다. null 객체의 경우 false를 반환합니다.
if(obj is AnimalObject)
{
//Then Work
}
운영자로서
as 연산자는 is 연산자와 동일한 작업을 수행하지만 차이점은 bool 대신 해당 형식과 호환되는 경우 개체를 반환하고 그렇지 않으면 null을 반환합니다. 다른 말로 'as'연산자는 호환되는 항목 간의 변환을 수행하는 데 사용됩니다. 유형.
예 :
Type obj = Object as Type;
is over is 연산자의 경우 형변환을 위해 두 단계를 수행해야합니다.
Check the Type using is
If it’s true then Type cast
실제로 이것은 CLR이 상속 계층 구조를 통과 할 때마다 지정된 유형에 대해 각 기본 유형을 확인하므로 성능에 영향을 미칩니다.
이를 방지하려면 as를 사용하십시오. 한 단계로 수행됩니다. 유형 확인을 위해서만 is 연산자를 사용해야합니다.
is
: is 연산자는 객체의 런타임 유형이 주어진 유형과 호환되는지 확인하는 데 사용됩니다.
as
: as 연산자는 호환 가능한 유형 간의 변환을 수행하는 데 사용됩니다.
object s = "this is a test";
string str=string.Empty;
if( s is string)
str = s as string;
is
다음 as
: 그것은 두 배의 박싱. 참조 유형의 경우을 수행 as
한 다음 null이 작동하는지 확인해야합니다.
보다 실증적이고 시각적 인 방법으로 차이점을 설명하는 아래의 YouTube 비디오를 살펴보십시오.
https://www.youtube.com/watch?v=IKmRtJcRX_I
아래는 코드 설명과 함께 긴 답변입니다.
"IS"키워드는 객체가 유형과 호환되는지 확인하는 데 유용합니다. 예를 들어 아래 코드에서 "ocust"개체가 "Customer"클래스 유형인지 확인합니다.
object ocust = new Customer();
if (ocust is Customer)
{
"AS"키워드는 한 유형에서 다른 유형으로 변환하는 데 도움이됩니다. 예를 들어 아래 코드에서는 객체를 문자열 데이터 유형으로 변환합니다. "AS"키워드가 형변환 할 수 없으면 NULL을 반환합니다.
object o = "somestring";
string str = o as string;
IS 키워드->는 주어진 객체의 유형이 새로운 객체 유형과 호환되는지 확인합니다. 예외를 던지지 않습니다. 부울 유형입니다. true 또는 false를 반환합니다.
`student stud = new student(){}
if(stud is student){} // It returns true // let say boys as derived class
if(stud is boys){}// It returns false since stud is not boys type
//this returns true when,
student stud = new boys() // this return true for both if conditions.`
AS 키워드 : 주어진 개체의 유형이 새 개체 유형과 호환되는지 확인합니다. 주어진 객체가 새로운 객체와 호환되면 null이 아닌 것을 반환하고 그렇지 않으면 null을 반환합니다. 예외가 발생합니다.
`student stud = new student(){}
// let say boys as derived class
boys boy = stud as boys;//this returns null since we cant convert stud type from base class to derived class
student stud = new boys()
boys boy = stud as boys;// this returns not null since the obj is pointing to derived class`
두 연산자 모두 안전한 유형 주조에 사용됩니다.
AS 연산자 :
AS 연산자는 주어진 개체의 유형이 새 개체 유형과 호환되는지 여부도 확인합니다. 이 키워드는 주어진 개체의 유형이 새 개체 유형과 호환되는지 여부를 확인합니다. 새로운 것과 호환되지 않으면 NULL을 반환합니다.
IS 운영자 :
이 연산자는 개체의 유형이 새 개체와 호환되는지 여부를 확인합니다. 호환 가능하면 true를 반환하고 그렇지 않으면 false를 반환합니다.