Delegate (대리자)
Event (이벤트)
Interface (인터페이스)
http://dis.dankook.ac.kr/lectures/hci09/entry/Interface
IEnumerable & IEnumerator Interface
http://dis.dankook.ac.kr/lectures/hci09/entry/Enumerator
IEquatable Interface
http://dis.dankook.ac.kr/lectures/hci09/entry/Equals
Indexer
http://dis.dankook.ac.kr/lectures/hci09/entry/Indexer
Property (속성)
http://dis.dankook.ac.kr/lectures/hci09/entry/Property
Method overloading (메소드 오버로딩) Method overriding (메소드 오버라이딩)
http://dis.dankook.ac.kr/lectures/hci09/entry/Method-Overloading
Abstract Class (추상 클래스)
http://dis.dankook.ac.kr/lectures/hci09/entry/Abstract-class
Sealed Class (봉인 클래스)
http://dis.dankook.ac.kr/lectures/hci09/entry/Sealed-Class
protected
-protected 접근 지정자를 사용한 멤버 필드와 메소드는 파생 클래스에서는 사용가능하나 클래스 외부에서는 호출하지 못함
destructor
-객체가 소멸될 때 필요한 정리 작업을 정의하는 부분
C++ Point & Point3D Class
http://dis.dankook.ac.kr/lectures/hci09/entry/C-Point-Point3D-Class
C# Point & Point3D Class
http://dis.dankook.ac.kr/lectures/hci09/entry/C-Point-Point3D-Class-1
C# Point & Point3D Class Assembly
http://dis.dankook.ac.kr/lectures/hci09/entry/C-Point-Point3D-Class-Assembly
C#은 두 가지 종류의 constructor, 즉 class constructor(static constructor), instance constructor(non-static constructor)를 지원한다.
static constructor
-static constructor는 static data member를 초기화하는데 사용
-static constructor는 접근 지정자를 쓸수 없음
-static constructor는 인자를 가질 수 없음
-static constructor는 non-static data member를 접근할 수 없음
public static void print()
{
Console.WriteLine(“Test.id=” + id);
}
}
class Program
{
static void Main(string[] args)
{
Test.print(); // 정적 메소드를 사용하여 Test.id를 출력
}
}
class Program
{
static void Main(string[] args)
{
Test1.print(); // 정적 메소드를 사용하여 Test.id를 출력
}
}
instance constructor
-instance
-default constructor가 지정되어 있지 않다면 컴파일러에서 자동 생성해줌
public class MyDerivedClass : MyBaseClass
{
int someMemberVariable;
}
// 위의 코드를 컴파일러에서 아래와 같이 해석함
public class MySimpleClass
{
int someMemberVariable;
public MySimpleClass() : base()
{
}
}
-constructor는 상속되지 않음
{
public MyBaseClass (int x)
{
}
}
{
// This constructor itself is okay – it invokes an
// appropriate base class constructor
public MyDerivedClass () : base (5)
{
}
public static void Main()
{
new MyDerivedClass (10); // ERROR: MyDerivedClass는 인자를 받는 생성자가 없음
}
}
공용 데이터를 저장하여 사용하고자 할 때, singleton 패턴이나 static 클래스를 사용한다.
1. 싱글톤 패턴 (Singleton design pattern)
-싱글톤 패턴이란 single instance object(해당 클래스의 인스턴스 하나)가 만들어지고, 어디서든지 그 싱글톤에 접근할 수 있도록 하기 위한 패턴
/// private constructor를 사용해서 static readonly로 객체 하나를 생성.
static readonly SiteStructure _instance = new SiteStructure();
/// 그 싱글톤에 접근하기 위한 property를 제공.
public static SiteStructure Instance
{
get { return _instance; }
}
/// private constructor, 즉 외부에서는 이 생성자를 부를 수 없음.
private SiteStructure()
{
// Initialize members, etc. here.
}
}// 싱글톤 객체를 인자로 전달 가능
SiteStructure site = SiteStructure.Instance;
OtherFunction(site); // Use singleton as parameter.
2. 정적 클래스 (Static class)
-static 키워드를 사용한 정적 클래스는 정적 멤버만 포함 가능
-정적 클래스는 new 키워드를 사용하여 정적 클래스의 인스턴스를 생성할 수 없음
-정적 클래스는 봉인 클래스 (sealed class) 임
-static 클래스는 single-instance, global 데이터를 저장하여 사용하는 용도로 적당
-그러나, 싱글톤은 인자(parameter)나 객체(object)로 사용가능하나 정적클래스는 불가능
/// C# doesn’t define when this constructor is run, but it will likely
/// be run right before it is used.
static SiteStatic()
{
// Initialize all of our static members.
}
}
3. 싱글톤(Singleton)을 Interface와 함께 사용
/// ISiteInterface를 상속받은 SiteStructure 싱글톤
class SiteStructure : ISiteInterface
{
// Implements all ISiteInterface methods.
// 생략..
}
/// 테스트
class TestClass
{
public TestClass()
{
// 싱글톤 객체를 ISiteInterface를 받는 함수에 인자로 전달.
SiteStructure site = SiteStructure.Instance;
CustomMethod((ISiteInterface)site);
}
/// Receives a singleton that adheres to the ISiteInterface interface.
private void CustomMethod(ISiteInterface interfaceObject)
{
// Use the singleton by its interface.
}
}
pass value type by value (값형식을 값에 의한 전달)
pass reference type by value (참조형식을 값에 의한 전달)
-copy of reference가 전달
pass value type by reference (값형식을 참조에 의한 전달)
–ref 키워드 사용
pass reference type by reference (참조형식을 참조에 의한 전달)
–ref 키워드 사용
pass value type by output (값형식을 output에 의한 전달)
–out 키워드 사용
pass reference type by output (참조형식을 output에 의한 전달)
–out 키워드 사용
참조: http://msdn.microsoft.com/en-us/library/0f66670z(VS.71).aspx
int value; // needed for TryParse
string str; // needed for ReadLine
Console.Write(“0부터 100까지 숫자를 입력하세요: “);
str = Console.ReadLine();
while ((!int.TryParse(str, out value)) || (value < 0 || value > 100))
{
Console.Write(“다시 0부터 100까지 숫자를 입력하세요: “);
str = Console.ReadLine();
}
int result = int.Parse(str);
Console.WriteLine(“입력된 숫자=” + result);