티스토리 뷰
-Nullable
int? a = null;
-ref, out
-ref, out의 사용법은 동일
-ref는 메서드로 전달되는 매개변수가 초기화 되어 있어야 전달가능
-out은 메서드고 전달되는 매개변수가 초기화 되어 있지 않아도 전달 가능, 하지만 해당 메서드에서 초기화해주지 않으면 에러
-this(), base()
-this는 본인의 생성자, base는 부모 클래스의 생성자
-named parameter
-매개변수의 이름을 넣어서 전달(가독성 증가) ex) method(param1 : "value1", param2 : "value2")
-optional parameter
-매개변수의 기본(디폴트)값을 설정하면, 해당 매개변수의 값은 전달해주지 않아도 디폴트로 저장됨
ex) method(int a, int b=0)
-가변길이 매개변수
-params 키워드
int sum(params int[] args)
-sealed class : 상속이 불가능하도록
-public sealed void SealMe() : 재정의(오버라이딩) 불가능하도록, virtual로 선언된 가상 데소드를 오버라이딩한 버전의 메소드만 가능
-is , as
is : 객체가 해당 형식에 해당 하는지를 검사
as : 형변환, 변환 실패시 null 반환
ex)
Mammal mammal = new Dog();
Dog dog;
if(mammal is Dog){
dog = (Dog)mammal;
dog.Bark();
}
ex)
Mammal mammal2 = new Cat();
Cat cat = mammal2 as Cat;
if(cat!=null){
cat.Meow();
}
-new : virtual 메소드가 아닌 메소드를 재정의(오버라이딩) 할 때 사용
public new void MyMethod()
이 경우, 완전한 다형성을 표현할 수는 없음
즉, 파생(자식) 클래스가 기반(부모) 클래스(base class)로 참조된 경우, 기반 클래스의 메서드가 호출되어버림..
-partial(분할 클래스)
-클래스의 구현이 길어질 경우 여러 파일에 나워서 구현할 수 있게 함
(분할클래스 예)
namespace PartialClass
{
partial class MyClass
{
public void Method1()
{
Console.WriteLine("Method1");
}
public void Method2()
{
Console.WriteLine("Method2");
}
}
partial class MyClass
{
public void Method3()
{
Console.WriteLine("Method3");
}
public void Method4()
{
Console.WriteLine("Method4");
}
}
class Program
{
static void Main(string[] args)
{
MyClass obj = new PartialClass.MyClass();
obj.Method1();
obj.Method2();
obj.Method3();
obj.Method4();
}
}
}