... | ... | @@ -86,10 +86,15 @@ foreach (var elem in dict) |
|
|
```
|
|
|
|
|
|
### **Nullable**
|
|
|
bool 타입은 true/false값만을 가질 수 있는데, Nullable<T>타입은 일반적인 값 형식에 대해 null표현이 가능하게 하는 역할을 한다.
|
|
|
bool 타입은 true/false값만을 가질 수 있는데, Nullable<T>타입은 일반적인 값 형식에 대해 null표현이 가능하게 하는 역할을 한다. Nullable Type은 두 가지 방법으로 선언될 수 있다.
|
|
|
``` cs
|
|
|
System.Nullable<T> variable;
|
|
|
//-or-
|
|
|
T? variable;
|
|
|
```
|
|
|
T는 Nullable type의 underlying type이다. reference type을 제외한 struct를 포함하는 모든 value type은 T가 될 수 있다.
|
|
|
``` cs
|
|
|
Nullable<int> intValue = 10;
|
|
|
|
|
|
int? n = null;
|
|
|
|
|
|
//int m1 = n; // Will not compile.
|
... | ... | @@ -152,8 +157,93 @@ C#에서는 case문에 break를 포함하는 것이 강제사항이라서 break |
|
|

|
|
|
|
|
|
6. as 연산자
|
|
|
as 연산자는 nullable types과 reference types간의 type conversion을 수행하는 연산자다. 기본적으로 as 연산자는 cast 연산자와 같지만 conversion이 불가능할경우 exception을 발생시키는 대신 null값을 반환한다.
|
|
|
``` cs
|
|
|
class csrefKeywordsOperators
|
|
|
{
|
|
|
class Base
|
|
|
{
|
|
|
public override string ToString()
|
|
|
{
|
|
|
return "Base";
|
|
|
}
|
|
|
}
|
|
|
class Derived : Base
|
|
|
{ }
|
|
|
|
|
|
class Program
|
|
|
{
|
|
|
static void Main()
|
|
|
{
|
|
|
|
|
|
Derived d = new Derived();
|
|
|
|
|
|
Base b = d as Base;
|
|
|
if (b != null)
|
|
|
{
|
|
|
Console.WriteLine(b.ToString());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
7. is 연산자
|
|
|
``` cs
|
|
|
if (obj is MyObject)
|
|
|
{
|
|
|
}
|
|
|
```
|
|
|
is 연산자는 obj가 MyObject type 또는 MyObject를 상속받은 type이면 true를 반환하고 다른 경우 false를 반환한다.
|
|
|
``` cs
|
|
|
class Class1 {}
|
|
|
class Class2 {}
|
|
|
class Class3 : Class2 { }
|
|
|
|
|
|
class IsTest
|
|
|
{
|
|
|
static void Test(object o)
|
|
|
{
|
|
|
Class1 a;
|
|
|
Class2 b;
|
|
|
|
|
|
if (o is Class1)
|
|
|
{
|
|
|
Console.WriteLine("o is Class1");
|
|
|
a = (Class1)o;
|
|
|
// Do something with "a."
|
|
|
}
|
|
|
else if (o is Class2)
|
|
|
{
|
|
|
Console.WriteLine("o is Class2");
|
|
|
b = (Class2)o;
|
|
|
// Do something with "b."
|
|
|
}
|
|
|
|
|
|
else
|
|
|
{
|
|
|
Console.WriteLine("o is neither Class1 nor Class2.");
|
|
|
}
|
|
|
}
|
|
|
static void Main()
|
|
|
{
|
|
|
Class1 c1 = new Class1();
|
|
|
Class2 c2 = new Class2();
|
|
|
Class3 c3 = new Class3();
|
|
|
Test(c1);
|
|
|
Test(c2);
|
|
|
Test(c3);
|
|
|
Test("a string");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//Output:
|
|
|
//o is Class1
|
|
|
//o is Class2
|
|
|
//o is Class2
|
|
|
//o is neither Class1 nor Class2.
|
|
|
```
|
|
|
|
|
|
<br>
|
|
|
<br>
|
|
|
<br>
|
... | ... | |