확장메소드(Extension Method)
클래스의 기능을 확장시켜주는 메소드입니다 쉽게 말해서 이걸 사용하면 굳이 불러오거나 할 필요없이 곧바로 사용할 수 있습니다.
사용방법)
namespace
네임스페이스명
{
public
static
class
클래스명
{
public
static
반환형식 메소드명(
this
확장대상형식 식별자, 매개변수..)
{
..
}
}
}
사용방법)
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Extension;
- namespace Extension
- {
- public static class ExtensionMethod
- {
- public static void increaseDelay(this int count, int delay)
- {
- do {
- for (int i=0; i < count; i++) {
- var t = Task.Run(async delegate
- {
- await Task.Delay(delay);
- return 42;
- });
- t.Wait();
- //Console.Write("{0},{1}", t.Status, t.Result);
- Console.Write("{0}초 ", i+1);
- }
- count = count + 1;
- Console.WriteLine("\n{0}번째 출력임돠", count);
- }while (count <= 5);
- }
- }
- }
- namespace ConsoleApplication2
- {
- class Program
- {
- static void Main(string[] args)
- {
- 0.increaseDelay(1000);
- }
- }
- }
결과)
음 뭔가 복잡하네..
14~27줄은 무시하셔도 됩니다. 시간은 1초씩 증가해서 지연시키는 겁니다.
우선
8줄 : 여기에서 namespace의 이름을 정해줍시다.
6줄 : 여기에선 정한 namespace를 사용한다고 선언합니다.
12줄 : 정적으로 메소드를 선언합니다.
37줄 : 여기에서 0은 increaseDelay 메소드의 count에 들어가고
increaseDelay(1000)의 1000은 delay에 들어갑니다.
호출을 0첫번째 인자값으로 한다는것이 특이점 입니다.
|
100줄, 1000줄, 1만줄!!! 이렇게 양이 늘어나면 찾기가 어려워지죠
따라서 1파트, 2파트 한 부분을 뚝 나눠서 정리할 수 있습니다.
사용방법)
partial class 클래스이름(식별자)
예제)
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication2
- {
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication21
- {
- partial class Nested
- {
- public void Test() { Console.WriteLine("냥"); }
- }
- partial class Nested
- {
- public void Test2() { Console.WriteLine("눠"); }
- }
- partial class Nested
- {
- public void Test3() { Console.WriteLine("끼"); }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Nested nested = new Nested();
- Console.WriteLine("그");
- nested.Test();
- Console.WriteLine("나");
- nested.Test2();
- Console.WriteLine("서");
- nested.Test3();
- Console.WriteLine("워 넣음");
- }
- }
- }
- }
결과)
설마 설명 필요함..?
|
사용방법)
class 클래스명
{
class 클래스명
{
..
}
}
예제)
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication2
- {
- public class OuterClass
- {
- private int a = 70;
- public class InnerClass
- {
- OuterClass instance;
- public InnerClass(OuterClass a_instance)
- {
- instance = a_instance;
- }
- public void AccessVariable(int num)
- {
- this.instance.a = num;
- }
- public void ShowVariable()
- {
- Console.WriteLine("a : {0}", this.instance.a);
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- OuterClass outer = new OuterClass();
- OuterClass.InnerClass inner = new OuterClass.InnerClass(outer);
- inner.ShowVariable();
- inner.AccessVariable(60);
- inner.ShowVariable();
- }
- }
- }
결과)
15줄 : OuterClass 객체를 생성함
17줄 : InnerClass의 생성자의 인자값으로 OuterClass의 객체를 받음
19줄 : instance 객체에 OuterClass의 객체인 a_instance를 집어넣음
22줄 : 호출할때 받은 인자값 num 으로 받음
24줄 : InnerClass의 instance에 a값 즉 private int a에 접근하여 수정함
'컴퓨터프로그래밍 > C#' 카테고리의 다른 글
C# - 제네릭 (0) | 2016.11.29 |
---|---|
C# - 인터페이스 (0) | 2016.11.29 |
C# - 추상클래스 (0) | 2016.11.27 |
C# - 메소드 메소드 재정의(override), 숨기기 (0) | 2016.11.27 |
C# - 상속 (0) | 2016.11.25 |