반응형
using System;
using System.Collections.Generic;
using System.Text;
// 메소드  :  멤버 함수를 OOP적으로 부르는 용어 !!
// 함수 -- 메소드 --  펑션 -- 프로시져 

// 오버 로딩 제공  
//  -- > 같은 이름의 함수가 여러개 존재하는것  
// --> 메소드의 이름은 같지만 시그니쳐 ( 매개변수, 리턴) 가 다르면
//      여러개의 메소드를 구현할수 있다 !! 
//  -----> 같은 기능을 수행하지만.. 매개변수 정보가 다를경우 !! 
/*
class Person
{
    public Person(int age, string name)
    { 
    
    }
    public Person(int age, string name, int money)
    { 
    
    }
    // 단점, 코드의 가독성이 떨어질수 있다 !! 
    // 여러개의 함수가 존재 --> 관리가 어렵다 !! 
    public void foo(int a) { }
 //   public void foo(int * a) { }
    public void foo(out int a) { a = 10; }
    public void foo(ref int a ) { } // 접근 지정자는 오버로딩에 영향을 주지 않는다 !! 
    private voㅂid foo(ref int a) { }
    private int foo(ref int a) { return 0;  }   // 리턴은 타입은 오버로딩에 영향을 주지 않는다 !! 
    private void foo( params  a) { } //params 는 불간능 !! 

}
 */
// 메소드의 시그니쳐  --->다른 메서드들과 구분하기위한 방법 !! 
// 1) 메서드이름 :  고유한 이름 
// 2) 파라미터의 형식 : 파라이터의 타입에 따라 구분한다 .
// 3) 파라미터의 개수  
// 4) 파라미터의 변경자 :  ref , out !! 


// 오버 라이딩  제공 !! 
// -->   부모에서 정의한 함수를 자식에서 재정의 하는것 
class Anamal 
{   
    // C#에서 가상함수를 구현 !! 
    public  virtual void Die()
    {
        Console.WriteLine(" 으악 !! ");
    }
}

class Person : Anamal
{   
    // override 
    // new 
    // sealed 메소드 :  오버라이딩을 더이상 못하게 해라 !! 
    public override sealed void Die() { Console.WriteLine(" Person 으악 !! "); }
}

class Student : Person
{
    public override void Die() { } 
}

namespace Method
{
    class Program
    {
        static void Main(string[] args)
        {    
            // C++ virtual 키워드의 효과 !! 
            Person  p = new Person();
            p.Die();
        }
    }
}

+ Recent posts