레이블이 sub class인 게시물을 표시합니다. 모든 게시물 표시
레이블이 sub class인 게시물을 표시합니다. 모든 게시물 표시

2013년 10월 24일 목요일

[닷넷4.0, C#강좌]C# 델리게이트 Func delegate 하나의 익명메소드와 무명함수를 만들기 위해 매번 별개의 델리게이트를 선언해야 하는 불편함이 있다. 이 문제를 ...

[닷넷4.0, C#강좌]C# 델리게이트 Func delegate 

하나의 익명메소드와 무명함수를 만들기 위해 매번 별개의 델리게이트를 선언해야 하는 불편함이 있다. 이 문제를 위해 MS에서는 Func, Action 델리게이트를 준비 했는데 Func 델리게이트는 결과를 반환하는 메소드를 참조하고 Action 델리게이트는 결과를 반환하지 않는 메소드를 참조한다.
 
Func 델리게이트는 결과를 반환하는 메소드를 참조하기 위해 만들어 졌는데 닷넷4.0 프레임워크에는 대략 17가지의 Func 델리게이트가 준비되어 있다.

public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T arg)
public delegate TResult Func<int T1, in T2, out TResult>(T1 arg, T2 arg)
public delegate TResult Func<int T1, in T2, in T3, out TResult>(T1 arg, T2 arg, T3 arg)
……
……
public delegate TResult Func<in T1,,,in T16, out TResult>(T1 arg, T2 arg, T3 arg,,, T16 arg)
모든 Func 델리게이트의 마지막 매개변수가 반환형식 이다.
 
[사용 예문]
 
입력 매개 변수가 없는 경우…
 
Func<int> func = () => 10;   //입력 매개변수 없으며 무조건 10 리턴
Console.WriteLine(func);
 
입력 매개 변수가 하나인 경우…
 
Func<int, int> func = (x) => x*x;  //입력 매개변수는 x하나, 반환형식 int
Console.WriteLine(func(3));      //9 리턴
 

[예제]
using System;
namespace Lambda
{
    class Program
    {
  
        static void Main(string[] args)
        {
            Func<int> func1 = () => 10;
            Console.WriteLine(func1());
            Func<int, int, int> func2 = (x, y) => x + y;
            Console.WriteLine("1+2={0}", func2(1,2));
        }
    }
}
 

2013년 7월 28일 일요일

(오라클자바개발자실무교육,오엔제이프로그래밍실무교육센터)JAVA OOP OverL oading과 Overriding

슈퍼클래스로부터 메소드를 상속받을 때, 서브클래스 내에 같은 이름의 메소드가 있는 경우에  시그네췌(Segnature)가 다르면 중복(overloading)이 되고 시그네췌 (Segnature) 가 같으면 재정의(overriding)가 된다.  



오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷  실무전문 강의)




오버라이딩
  상속관계에 있는 클래스들간에 같은 이름의 메소드를 정의하는 행위 
  기존 클래스의 메소드 구현 부분만 약간 변화시켜 새로운 클래스를 생성할 수 있다 
  매개변수의 개수와 타입이 같아야 한다. 

오버로딩
  같은 클래스 내에 같은 이름의 생성자나 메소드를 사용하는 행위 
  매개변수의 개수와 타입이 달라야 한다 


[오버라이딩 예제]

class A {
int i=10; 
int f() { return i; }
static char g() { return 'A'; }
}
class B extends A{
int i=20;            //AAC i°¡ °¡·AAo´A°IAI´U. 
int f() { return -i; }//AcA¤AC
static char g() { return 'B'; }
}
public class OverrideTest {
public static void main(String[] args) {
B b = new B();
System.out.println(b.i);  //20
System.out.println(b.f()); //-20
System.out.println(b.g()); //B
System.out.println(B.g()); //B

A a = b;  //A a = (B) bμμ °¡´E
System.out.println(a.i);  //10
System.out.println(a.f()); //-20
System.out.println(a.g()); //A
System.out.println(A.g()); //A
}
}


[오버로딩 예제]
class OverLoadingTest {
public void say() {
System.out.println("default...");
}

public void say(String msg) {
System.out.println(msg);
}

  public static void main(String args[]) {
    OverLoadingTest ol = new OverLoadingTest();
ol.say();
ol.say("안녕하세요~ 반갑습니다...");
}