728x90
1. Partial Class
- 클래스를 다른 파일로 나눠서 관리할 때 사용하는 기능이다.
- 클래스에 Partial을 붙여서 사용한다.
- 비록 파일은 나누어져있지만, 하나의 클래스라고 보면 된다.
- 나눠진 파일에서 서로 같은이름의 함수를 선언하려고 하면 오류가 발생한다.
- 나눠진 파일 이름에 +를 붙이고, 나눈 이유를 적는등으로 구분한다.
- 예시: 수학 공식을 전부 정리해야하는 경우, 줄이 너무 길어지거나 복잡해질때, Partial을 이용하여 정수형이나 실수형 등으로 파일을 나누는 등으로 이용
2. Extended Method
- 이미 존재하는 자료형에 내가 원하는 메서드를 추가하는 기능이다.
// Define an interface named IMyInterface.
namespace DefineIMyInterface
{
using System;
public interface IMyInterface
{
// Any class that implements IMyInterface must define a method
// that matches the following signature.
void MethodB();
}
}
// Define extension methods for IMyInterface.
namespace Extensions
{
using System;
using DefineIMyInterface;
// The following extension methods can be accessed by instances of any
// class that implements IMyInterface.
public static class Extension
{
public static void MethodA(this IMyInterface myInterface, int i)
{
Console.WriteLine
("Extension.MethodA(this IMyInterface myInterface, int i)");
}
public static void MethodA(this IMyInterface myInterface, string s)
{
Console.WriteLine
("Extension.MethodA(this IMyInterface myInterface, string s)");
}
// This method is never called in ExtensionMethodsDemo1, because each
// of the three classes A, B, and C implements a method named MethodB
// that has a matching signature.
public static void MethodB(this IMyInterface myInterface)
{
Console.WriteLine
("Extension.MethodB(this IMyInterface myInterface)");
}
}
}
// Define three classes that implement IMyInterface, and then use them to test
// the extension methods.
namespace ExtensionMethodsDemo1
{
using System;
using Extensions;
using DefineIMyInterface;
class A : IMyInterface
{
public void MethodB() { Console.WriteLine("A.MethodB()"); }
}
class B : IMyInterface
{
public void MethodB() { Console.WriteLine("B.MethodB()"); }
public void MethodA(int i) { Console.WriteLine("B.MethodA(int i)"); }
}
class C : IMyInterface
{
public void MethodB() { Console.WriteLine("C.MethodB()"); }
public void MethodA(object obj)
{
Console.WriteLine("C.MethodA(object obj)");
}
}
class ExtMethodDemo
{
static void Main(string[] args)
{
// Declare an instance of class A, class B, and class C.
A a = new A();
B b = new B();
C c = new C();
// For a, b, and c, call the following methods:
// -- MethodA with an int argument
// -- MethodA with a string argument
// -- MethodB with no argument.
// A contains no MethodA, so each call to MethodA resolves to
// the extension method that has a matching signature.
a.MethodA(1); // Extension.MethodA(IMyInterface, int)
a.MethodA("hello"); // Extension.MethodA(IMyInterface, string)
// A has a method that matches the signature of the following call
// to MethodB.
a.MethodB(); // A.MethodB()
// B has methods that match the signatures of the following
// method calls.
b.MethodA(1); // B.MethodA(int)
b.MethodB(); // B.MethodB()
// B has no matching method for the following call, but
// class Extension does.
b.MethodA("hello"); // Extension.MethodA(IMyInterface, string)
// C contains an instance method that matches each of the following
// method calls.
c.MethodA(1); // C.MethodA(object)
c.MethodA("hello"); // C.MethodA(object)
c.MethodB(); // C.MethodB()
}
}
}
/* Output:
Extension.MethodA(this IMyInterface myInterface, int i)
Extension.MethodA(this IMyInterface myInterface, string s)
A.MethodB()
B.MethodA(int i)
B.MethodB()
Extension.MethodA(this IMyInterface myInterface, string s)
C.MethodA(object obj)
C.MethodA(object obj)
C.MethodB()
*/
728x90
'프로그래밍 > C#' 카테고리의 다른 글
[C#] Interface(인터페이스),abstract class(추상클래스) (0) | 2023.06.22 |
---|---|
VisualStudio C#에서 함수에 설명을 추가하는 방법 (0) | 2023.06.22 |
[C#] 박싱,언박싱 / 업캐스팅, 다운캐스팅 (0) | 2023.06.20 |
[C#] List<T>를 이용할때, 같은 값이 계속해서 출력되는 이유? (0) | 2023.06.20 |
[C#] 프로퍼티, 왜 사용하는거지? (0) | 2023.06.18 |