Post List

2017/11/27

C#__6.0 상속과 Object


상속 
 -  C#은 단일 상속만 지원한다. 계층 상속은 가능하지만 다중 상속은 허용되지 않습니다. 그리고 sealed 예약어를 통해 상속을 막을 수도 있답니다. ex) sealed class Pen


C#에서의 캐스팅
 1. as 연산자 : 
 - 명시적 형변환하는 경우 컴파일 단계가 아닌 프로그램을 실행할 때 오류가 발생합니다. 따라서 오류를 발생시키지 않고도
   형변환이 가능한지 확인할 수 있는 방법으로, 참조형 타입에서만 사용이 가능합니다.
1
2
3
4
5
Computer pc           = new Computer(); 
NoteBook notebook     = pc as NoteBook; 
if(notebook != null)
     Console.WriteLine("캐스팅성공");
cs

 2. is 연산자 : 
 - 형변환에 대한 가능성 여부를 불린형의 결과값으로 반환합니다. as와 is 사용기준은 형변환된 인스턴스가 필요하다면 as, 필요없다면 is를 사용합니다. 또한 참조형식외의 값 형식에도 사용할 수 있답니다.

모든 타입의 조상 : object
 - 클래스를 정의할 때 부모 클래스를 명시하지 않는다면 C#컴파일러는 기본적으로 object라는 타입에서 상속받는다고 가정하고 자동으로 코드를 생성합니다.
1
2
3
4
5
6
7
8
9
public class DeviceManage 
{
public class DeviceManager : object 
{
}
cs

 - 참조형식과 값 형식은 처리 방식이 매우 다른데, 모든 값 형식을 System.ValueType타입에서 상속받게 하고 있으며, 
   다시 System.ValueType은 objec를 상속받고 있습니다.
   즉 값 형식은 System.ValueType으로부터 상속받은 모든 타입을 의미하고, 참조 형식은 object로부터 상속받은 타입 가운데 System.ValueType의 하위 타입을 제외한 모든 타입을 의미한다.
 * System.ValueType => bool, sbyte, byte, short, ushort, int ....., enum, struct 

object가 가진 메소드
1
2
public virtual bool Equals(object obj);
cs
  - 값을 비교한 결과를 불린형으로 반환합니다. 클래스의 경우 할당된 메모리 주소가 다르기때문에 false처리로 처리됩니다.

1
public virtual int GetHashCode();


cs
  - 인스턴스를 고유하게 식별할 수 있는 4바이트 int값을 반환합니다. Equals 메서드와 연계되는 특성이며, Equals값이 true일때 HashCode도 같은 값입니다.

1
public Type GetType();
cs
  - 클래스 이름을담고 있으며, 필드, 메서드, 프로퍼티와 같은 멤버를 담고 있는 또 다른 타입으로 볼 수 있습니다.

1
public virtual string ToString();
cs
  - 해당 인스턴스가 속한 클래스의 전체 이름을 반환합니다.


typeof 예약어
 - 클래스의 이름에서 곧바로 Type을 구하는 방법 제공합니다.
1
Type type = typeof(double);
cs

모든 배열의 조상 : System.Array
 - 정의되는 모든 배열은 Array타입을 조상으로 둡니다.

Array가 가진 멤버
 1. Rank (인스턴스 프로퍼티) : 
  - 배열 인스턴스의 차원수를 반환합니다.
 2. Length (인스턴스 프로퍼티)  : 
  - 배열 인스턴스의 요소수를 반환합니다.
 3. Sort (정적 메소드)  : 
  - 배열 요소를 값을 순서대로 정렬합니다.
 4. GetValue (인스턴스 메소드)  : 
  - 지정된 인덱스의 배열 요소 값을 반환합니다.
 5. Copy (정적 메소드)  : 
  - 배열의 내용을 다른 배열에 복사합니다.


base 예약어
 - 부모클래스를 명시적으로 가리키는데 사용됩니다. this와 마찬가지로 부모 클래스의 멤버를 사용할 때 base 키워드가 생략된 것이나 다름없답니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    public class Person
    {
        protected string ssn     = "444-55-6666";
        protected string name     = "John L. Malgraine";
        public virtual void GetInfo()
        {
            Console.WriteLine("Name: {0}", name);
            Console.WriteLine("SSN: {0}", ssn);
        }
    }
    class Employee : Person
    {
        public string id = "ABC567EFG";
        public override void GetInfo()
        {
            // Calling the base class GetInfo method:
            base.GetInfo();
            Console.WriteLine("Employee ID: {0}", id);
        }
    }
    class TestClass
    {
        static void Main()
        {
            Employee E = new Employee();
            E.GetInfo();
        }
    }
cs