'C#'에 해당되는 글 15건

  1. 2016.06.08 C# 클래스 - 상속
  2. 2016.06.08 C# 클래스 - 형변환
  3. 2016.06.07 C# 클래스 - 프로퍼티(property)
  4. 2016.06.07 C# 클래스 - 생성자
  5. 2016.06.07 C# 배열

C# 클래스 - 상속

C# 2016. 6. 8. 01:17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Parent
{
    int property;
    public virtual void foo()
    {
        System.Console.WriteLine("Foo!");
    }
}
 
public class Child : Parent
{
    public override void foo()
    {
        // 부모의 foo 호출
        base.foo();
 
        // 아래 두 줄은 같은 동작
        this.foo();
        foo();
    }
}


virtual 키워드를 붙이지 않은 메소드는 override 할 수 없다.


부모 함수를 찾고 싶으면 base 키워드를 이용한다.

(C++에서의 Parent::foo() 와 같다.)


1
2
3
4
5
6
7
8
9
public sealed class Leaf
{
 
 
public class ChildLeaf : Leaf // 컴파일 안됨
{
 
}
cs


sealed 키워드를 사용해서 상속을 막을 수 있다.





* C#에서는 다중상속을 지원하지 않는다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Parent()
{
    int number;
    public Parent(int number)
    {
        this.number = number;
    }
}
 
public class Child : Parent
{
    public Child() // 에러 발생
    {
    }
}
cs


C#에서 위와 같이 부모 클래스에는 없는 signature의 생성자가 있을 경우에, 아래와 같은 문법을 활용할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Parent()
{
    int number;
    public Parent(int number)
    {
        this.number = number;
    }
}
 
public class Child : Parent
{
    public Child() : base(0)
    {
    }
    
    public Child(int number) : base(number) // 이런 것도 된다.
    {
    }
}
cs


부모 자식간에만 되는 것은 아니다. 아래와 같이 활용 가능.

1
2
3
4
5
6
7
8
9
10
11
public class Parent()
{
    int number;
    public Parent(int number)
    {
        this.number = number;
    }
    public Parent() : this(0)
    {
    }
}
cs


아주 좋은 기능이다.

'C#' 카테고리의 다른 글

C# 연산자 오버로딩  (0) 2016.06.08
C# 클래스 - Object 클래스  (0) 2016.06.08
C# 클래스 - 형변환  (0) 2016.06.08
C# 클래스 - 프로퍼티(property)  (0) 2016.06.07
C# 클래스 - 생성자  (0) 2016.06.07
Posted by RPG만들기XP
,

C# 클래스 - 형변환

C# 2016. 6. 8. 00:48
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Parent
{
    public void foo()
    {
        System.Console.WriteLine("Foo!");
    }
}
public class Child : Parent
{
    public void foo2()
    {
        System.Console.WriteLine("Foo2!");
    }
}
 
Parent something = new Child();
something.foo();
//Child stupid = something; // 컴파일 에러
Child smart = something as Child; // 잘 됨
if (something is Child)
    System.Console.WriteLine("something is Child!");
if (smart is Parent)
    System.Console.WriteLine("smart is Parent!");
cs


실행 결과 - 

Foo!

something is Child!

smart is Parent!


자식 -> 부모로의 형변환은 암묵적으로 가능하다.

부모 -> 자식으로는 안된다.

16번 라인은 C#에서의 자식->부모로의 암묵적 형변환을 보여주고 있다.

18번 라인은 부모->자식으로의 암묵적 형변환을 시도하였으나, 컴파일이 되지 않는다.


as 키워드는 캐스팅이 가능할 경우 캐스팅하고, 실패했을 경우 null을 리턴한다.

is 키워드는 실제로 캐스팅을 하지는 않고, 캐스팅이 가능한지 여부를 검사하여 bool 형으로 반환한다.

'C#' 카테고리의 다른 글

C# 클래스 - Object 클래스  (0) 2016.06.08
C# 클래스 - 상속  (0) 2016.06.08
C# 클래스 - 프로퍼티(property)  (0) 2016.06.07
C# 클래스 - 생성자  (0) 2016.06.07
C# 배열  (0) 2016.06.07
Posted by RPG만들기XP
,


1
2
3
4
5
6
7
8
9
10
class MYClass
{
    int testNum = 0;
 
    public int TestNum
    {
        get { return testNum;}
        set { testNum = value; }
    }
}
cs


이렇게 정의해두면


1
2
3
MyClass instance = new MyClass();
instance.TestNum = 10// set
int num = instance.TestNum; // get
cs


이렇게 사용이 가능하다.



setter에 인자가 없는 것처럼 보이지만, value가 인자를 뜻하는 예약어이다.


굉장히 편리하고 예쁘다.

'C#' 카테고리의 다른 글

C# 클래스 - Object 클래스  (0) 2016.06.08
C# 클래스 - 상속  (0) 2016.06.08
C# 클래스 - 형변환  (0) 2016.06.08
C# 클래스 - 생성자  (0) 2016.06.07
C# 배열  (0) 2016.06.07
Posted by RPG만들기XP
,

C# 클래스 - 생성자

C# 2016. 6. 7. 21:34
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyClass
{
    string test_string;
 
    public MyClass()
    {
        test_string = "This is test string";
    }
    ~MyClass()
    {
        // 어쩌고저쩌고
    }
}
cs


C#에서의 생성자는 C++에서의 생성자와 똑같이 생각하면 된다.


소멸자 또한 제공하는데, C#에서는 객체 파괴를 GC가 담당하므로 파괴 시기를 예측할 수 없어 잘 사용하지 않는다.

Native 프로그램과 묶여 돌아갈 일이 있을 때에 사용하는 경우가 있다.

'C#' 카테고리의 다른 글

C# 클래스 - Object 클래스  (0) 2016.06.08
C# 클래스 - 상속  (0) 2016.06.08
C# 클래스 - 형변환  (0) 2016.06.08
C# 클래스 - 프로퍼티(property)  (0) 2016.06.07
C# 배열  (0) 2016.06.07
Posted by RPG만들기XP
,

C# 배열

C# 2016. 6. 7. 21:26
1
2
3
int [,] arr1 = new int[10,5];
 
short [,,] arr2 = new short[8,3,10];
cs

C#에서 배열은 위와 같이 선언한다.




C#에는 가변 배열(jagged array)이 있다.

문법은 다음과 같다.


1
2
3
4
int [][] arr = new int [3][];
arr[0= new int [10];
arr[1= new int [9];
arr[2= new int [5];
cs

"배열의 배열"로 생각할 수 있다.

다차원 배열에 비해 메모리 낭비를 줄일 수 있다.


하지만 꼭 필요한 경우가 있을지는 의문.



C#의 배열은 모두 System.Array를 상속받는다.

'C#' 카테고리의 다른 글

C# 클래스 - Object 클래스  (0) 2016.06.08
C# 클래스 - 상속  (0) 2016.06.08
C# 클래스 - 형변환  (0) 2016.06.08
C# 클래스 - 프로퍼티(property)  (0) 2016.06.07
C# 클래스 - 생성자  (0) 2016.06.07
Posted by RPG만들기XP
,