■클래스와 인스턴스
오브젝트를 만들때, 먼저 설계도가 필요하다.
내부가 어떤구조로 되어있는지, 외부에거 어떤 조작이 되는지를 결정하게 된다.
이런 오브젝트 설계도를 클래스(class)라고 한다.
이것에 대해, 설계도를 가지고 만들어진 오브젝트의 실체를 인스턴스(instance)라고 한다
■클래스 정의
class 클래스명
{
클래스 실제 부품구현
}
■클래스 이용
클래스를 사용하기 위해서는 인스테스를 작성해야 된다.
1.인스턴스를 격납하는 변수를 정의한다.
클래스명 변수명;
2.new 키워드로 인스턴스를 작성해서, 준비한 변수를 격납한다.
변수 = new 클래스명();
그리고, 변수뒤에 점(.)으로 나누어서 멤버명을 쓰면 멤버변수와 메소드를 사용할수 있다.
변수이름.멤버이름
■클래스의 분할정의
ver.2.0
C# 2.0에서는 클래스를 정의할때 partial 키워드를 부쳐서, 클래스정의를 분할할수 있게되었다.
예를 들면
partial class Complex
{
public double re;
public double im;
}
partial class Complex
{
public double Abs()
{
return Math.Sqrt(re * re + im * im);
}
}
ver.3.0
C# 3.0에서 partial method라는 기능이 추가되었다.
partial class내부에서, 멤버에 partial을 부쳐서 메소드의 선언과 정의를 나누는 것이다.
정의사양과 제한항목은 아래와 같다.
- partial을 부쳐서 메소드를 선언
- 반드시 partial class내부여야 한다.
- private 여야 한다.
- 반환값은 void 이외는 불가
- 인수는 자유롭게 취할수 있다. ref,this,params도 이용가능. out인수는 불가
- 클래스메소드(static)에도 이스턴스메소드(비 static)에도 가능.
예를 들면
partial class Program{
static void Main(string[] args)
{
OnBeginProgram();
Console.Write("program body\n");
OnEndProgram();
}
static partial void OnBeginProgram();
static partial void OnEndProgram();
}
partial class Program
{
static partial void OnBeginProgram()
{
Console.Write("check pre-condition\n");
}
static partial void OnEndProgram()
{
Console.Write("check post-condition\n");
}
}
■익명형
ver.3.0
C# 3.0에서는 익명 형 (anonymous type)을 작성할 수 있게 되었다.
예를 들어
var x = new { FamilyName= "이", FirstName= "효리" };
위의 코드라면, 자동적으로, 아래와 같은 모양이 생성되어진다.
// 이 __Anonymous 이라는 이름은 프로그래머가 참조할수 있는것은 아니다.
class __Anonymous1
{
private string f1;
private string f2;
public string FamilyName
{
get { return this.f1}
set { this.f1 = value}
};
public string FirstName
{
get { return this.f2}
set { this.f2 = value}
};
}
이 기능은 LINQ와 함께 이용하면 진가를 발휘한다.
혼자 사용되는 경우는 그렇게 많지 않을것으로 생각되고, 예를 들어 아래와 같이 사용할수 있다.
var rectangle = new { Width = 2, Height = 3 };
Console.Write(
"폭 : {0}\n 높이: {1}\n 면적: {2}\n",
rectangle.Width,
rectangle.Height,
rectangle.Width * rectangle.Height
);
참조
'프로그래밍 > C#.net' 카테고리의 다른 글
은폐 (0) | 2009.08.24 |
---|---|
Constructor (0) | 2009.08.24 |
작업표시줄에 App 숨기는 꽁수 (0) | 2009.03.24 |
바탕화면을 부모로 가지기 (0) | 2009.03.24 |
FormBorder.None 에 간단하게 드래그이벤트 추가 코드 (0) | 2009.03.24 |
댓글