키워드와 키워드의 차이점
C #에서 키워드 is
와 as
키워드 의 차이점을 알려주세요 .
이다
is
운영자 점검 목적은 특정 형태로 운영되는 경우.
예 :
if (someObject is StringBuilder) ...
같이
as
운영자 시도는 특정 유형에 개체를 캐스팅하고 실패하면 NULL을 반환합니다.
예 :
StringBuilder b = someObject as StringBuilder;
if (b != null) ...
또한 관련 :
주조
캐스트 연산자의 시도는 특정 유형에 개체를 캐스팅하고 실패 할 실행을 던집니다.
예 :
StringBuilder b = (StringBuilder)someObject.
IS 와 As 의 차이점은 ..
IS -Is 연산자는 지정된 유형의 개체를 검사하는 데 사용 된 결과를 부울 (True 또는 False)로 반환합니다.
AS -As 연산자는 지정된 유형 또는 클래스로 캐스팅되는 데 사용됩니다.
전의.
Student s = obj as Student;
다음과 달라집니다.
Student s = obj is Student ? (Student)obj : (Student)null;
is 키워드는 필요한에있는 값이 오른쪽에있는 유형의 인스턴스인지 확인합니다. 예를 들면 다음과 같습니다.
if(obj is string)
{
...
}
이 경우 obj를 더 많이 가져 오려면 추가 명시 적 캐스트를 추가합니다.
as 키워드는 널 입력 가능 유형을 캐스트하는 데 사용됩니다. 지정된 값이 지정된 유형의 인스턴스가 아닌 경우 널이 리턴됩니다. 예를 들면 다음과 같습니다.
string str = obj as string;
if(str != 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
}
위의 C # 코드에 대한 IL 코드는 첨부 된 이미지에 여기에 이미지 설명을 입력하십시오.
is 키워드 사용에 대한 IL 코드에는 isinsta 및 castclass 모두 IL 명령어가 포함되어 있습니다 . 그러나 키워드 사용에 대한 IL 코드에는 isinsta 만 있습니다 .
위에서 언급 한 사용법에서 키워드가 사용되는 곳에서 두 번 유형 캐스트가 발생하고 키워드가 사용되는 곳에서는 한 번만 발생합니다.
참고 : 'is'키워드를 사용하여 일부 조건을 확인하는 경우 유형 캐스트 결과에 관심이 없습니다. 여기에서도 유형 캐스트가 한 번만 발생합니다. 즉
if (baseclassInstance is DerivedClass)
{
// do something based on the condition check.
}
필요에 따라 'is'및 'as'키워드가 사용됩니다.
나는 말하고 싶다 : MSDN 온라인을 읽으십시오.
is 연산자는 객체가 주어진 유형과 호환되는지 여부를 확인하고 평가 결과는 부울 (true 또는 false)입니다.
as 연산자는 예외를 발생시키지 않습니다.
캐스트 인 Is operator는 성공하면 true를 반환합니다. 캐스트가 실패하면 false를 반환합니다. 그것으로 변환 된 변수를 캡처 할 수 없습니다. 이 연산자는 if 문과 표현식에서 유형을 확인할 때 가장 유용합니다. is-cast는 결과 변수가 더 이상 사용되지 않는 경우에만 이상적입니다.
캐스트 그대로입니다. 이를 통해 성능을 얻고 캐스트가 유효하지 않을 때 예외를 피할 수 있습니다. 캐스트가 불가능한 경우 Null이 반환됩니다. 참조 유형의 경우 캐스트가 권장됩니다. 빠르고 안전하며 결과 변수를 null에 대해 테스트 한 다음 사용할 수 있습니다. 이것은 여분의 캐스트를 제거합니다
- is 연산자는 객체가 주어진 유형과 호환되는지 여부를 확인하고 결과는 true 또는 false입니다.
- 한 유형을 다른 유형으로 캐스트하는 데 사용되며 변환 실패시 예외를 발생시키는 경우를 제외하고는 null입니다. 예제로 더 나은 이해를 위해 링크를 참조하십시오 https://blogs.msdn.microsoft.com/prakasht/2013/04/23/difference-between-direct-casting-is-and-as-operator-in-c/
is OPERATOR C #의 is 연산자는 개체 유형을 확인하는 데 사용되며 bool 값을 반환합니다. 개체가 동일한 유형이면 true이고 그렇지 않으면 false입니다. 또는 "is"연산자는 개체의 런타임 유형이 주어진 유형과 호환되는지 여부를 확인하는 데 사용됩니다. null 객체의 경우 false를 반환합니다.
if(obj is AnimalObject)
{
//Then Work
}
운영자로서
as 연산자는 is 연산자와 동일한 작업을 수행하지만 차이점은 bool 대신 해당 유형과 호환되는 경우 객체를 반환하고 그렇지 않으면 null을 반환합니다. 유형.
예 :
Type obj = Object as Type;
is over is 연산자의 경우 형변환을 위해 두 단계를 수행해야합니다.
Check the Type using is
If it’s true then Type cast
실제로 이것은 CLR이 상속 계층 구조를 통과 할 때마다 지정된 유형에 대해 각 기본 유형을 확인하므로 성능에 영향을 미칩니다.
이를 방지하려면 as를 사용하십시오. 한 단계로 수행됩니다. 유형 확인을 위해서만 is 연산자를 사용해야합니다.
As 연산자는 캐스트와 유사하지만 실패하면 예외 대신 null을 반환합니다.
그리고 Is 연산자는 하나의 객체가 특정 유형과 호환되는지 확인하는 데 사용됩니다. 일반적으로 If 문에서 사용됩니다.
is
: is 연산자는 객체의 런타임 유형이 주어진 유형과 호환되는지 확인하는 데 사용됩니다.
as
: as 연산자는 호환 가능한 유형 간의 변환을 수행하는 데 사용됩니다.
object s = "this is a test";
string str=string.Empty;
if( s is string)
str = s as string;
보다 실증적이고 시각적 인 방법으로 차이점을 설명하는 아래의 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;
MyClass myObject = (MyClass) obj;
vs
MyClass myObject = obj as MyClass;
두 번째는 obj가 MyClass가 아닌 경우 클래스 캐스트 예외를 throw하는 대신 null을 반환합니다.
true 또는 false 만 반환합니다.
IS와 AS 모두 Safe Type Casting에 사용됩니다.
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를 반환합니다.
"is"는 유형 간 동등성 검사를위한 것이며 bool 값을 반환하는 반면 "as"는 유형 변환을위한 것이며 변환이 예외 대신 유효하지 않은 경우 null을 반환합니다.
참고 URL : https://stackoverflow.com/questions/3786361/difference-between-is-and-as-keyword
'IT' 카테고리의 다른 글
대체에서 데이터 유형을 변경하는 방법 (0) | 2020.07.24 |
---|---|
ReactJS 호출 메소드 (0) | 2020.07.24 |
패키지 목록을위한 Spring Boot yaml 구성 (0) | 2020.07.24 |
R 발광 (0) | 2020.07.24 |
cython 및 mingw로 실행하면 gcc가 생성됩니다 : 오류 : 인식 할 수없는 명령 행 옵션 '-mno-cygwin' (0) | 2020.07.24 |