확장 메서드 class 상속이나 변경 없이 특정 namespace 에서 별도로 구현한 메서드를 기존 클래스의 메서드로 사용가능한 기능 namespace Ext{ public static class IntExt { public static int Mod(this int myInt, int divisor) { return myInt % divisor; } public void test() { int a = 10; a.Mod(5); } }} Programming/C# (vs Java) 2012.11.20
partial / struct partial : class 내용 단순 분할 (컴파일시 합쳐짐)partial class ClassA { public void a() {} }partial class ClassA { public void b() {} } struct: c 와는 달리 메서드를 갖는 등 class 와 비슷하나, 아래와 같은 차이가 있다.1. 은닉성 보다 데이터의 자료 구조 자체로서 사용하기에 접근자를 주로 public 으로 사용한다.2. 가장 큰 차이점은 new 연산 없이 선언만으로 생성3. 대입시 deep copy4. 생성자는 반드시 매개변수가 잇어야 함5. System.ValueType 으로 부터 직접 상속된 형태 Programming/C# (vs Java) 2012.11.20
virtual, override, base override 는 virtual 로 정의된 메서드만 재정의 가능virtual 로 정의하더라도 override 가 없으면 new 생성자 뒤의 타입의 메서드가 호출됨.new 로 정의하면 기존 메서드를 감춤. 단, base class 형에 derived class 로 생성하더라도 base class 의 메서드가 호출됨C# 에서는 base 로 super class 를 참조함 (Java 에서의 super) class ClassA { public void run() { Console.WriteLine("ClassA"); } } class ClassB : ClassA { public void run() { Console.WriteLine("ClassB"); } } class ClassC { public virtua.. Programming/C# (vs Java) 2012.11.19
sealed 자바의 final 과 동일하다고 보면 됨!final classfinal method 등은 상속이 안되거나, 재정의가 안되겠지. Programming/C# (vs Java) 2012.11.19
internal / protected internal JAVA 와는 다르게 상속 관계나 클래스 내/외부 상관 없이 관계가 있는 클래스 접근에 대한 접근자를 제공한다.그것이 internal (public 비슷), protected internal (protected 비슷) 이다.같은 어셈블리 안에선 접근이 가능하다는 뜻인데 쉽게 말해 같은 프로젝트 안이라 보면 되겠다. Programming/C# (vs Java) 2012.11.19
생성자 상속(?) public MyClass() {}public MyClass(int a) : this() { // MyClass();}public MyClass(int a, int b) : this(a) {// MyClass(a);}위와 같이 공통적인 부분을 제거하려면 상속과 비슷한 형태로 구현 가능함 Programming/C# (vs Java) 2012.11.19
shallow / deep copy shallow copy= (대입)을 이용한 복사 deep copyIClonable 객체를 상속받고 Clone 메서드를 오버라이딩 후사용하는 쪽에서 .DeepCopy() 호출 Programming/C# (vs Java) 2012.11.19
소멸자 JAVA 와는 다르게 C# 에는 ~destructor() 와 같이 소멸자 정의가 가능하다. 하지만 언제 호출될지 모르고, 계층구조상 성능이 떨어질 수 있다고 하니 되도록 사용하지 않는다고 함 Programming/C# (vs Java) 2012.11.19
ref / out / params / 명명된 매개변수 / 선택적 매개변수 [call by reference 를 하려면...]ref 만 변수 앞에 붙여주면 됨static void swap(ref int a, ref int b) [2개 이상의 값을 리턴하고 싶다면...]ref 를 써도 되지만, 좀더 안전한 out 을 써주면 됨void divide(int a, int b, out int q, out int r) [가변길이 변수는...]int sum(params int[] args) 과 같이 params 와 배열을 써주면 됨void print(string name, string phone) { }print(name: "윤", phone: "010"); [선택적 매개변수는...]void func(int a = 0, int b = 0) 과 같이 기본값을 넣어주면 됨 Programming/C# (vs Java) 2012.11.19
foreach FOREACH int [] arr = new int [] { 0, 1, 2, 3, 4};foreach(int a in arr) {} GOTOfor { for { for { if () goto EXIT; } } }EXIT: Programming/C# (vs Java) 2012.11.19