구조체의 개념 |
C#에서 크기가 작거나 내부가 그렇게 복잡하지 않을 때, 즉 작고 단순한 메소드를 포함하고 있는 선, 컬러와 같은 그래픽 요소 등을 구조체로 정의합니다.
클래스는 힙에 생성되는 참조 타입이다.
구조체는 스택에 생성되는 값 타입이다.
구조체는 클래스보다 메모리 소모가 덜합니다.
구조체 선언형식
struct 구조체명
{
// 멤버변수, 메소드,
}
위의 예제를 보시면, 클래스처럼 멤버변수를 가질수도 있고, 메소드 역시 가질 수 있습니다.
구조체를 사용하여 몬스터를 정의해 보겠습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
struct Monster
{
public string name;
public int hp;
public int attack;
public int defence;
public int evade;
public Monster(string name, int korean, int math, int
society, int science)
{
this.name = name;
this.hp = korean;
this.attack = math;
this.defence = society;
this.evade = science;
}
public void Show()
{
Console.WriteLine("이름: ",name);
Console.WriteLine("체력: " + hp + ", 공격력: " + attack
+ ", 방어력:" + defence + ",
회피율: " + evade + "\n");
}
}
class Program
{
static void Main(string[] args)
{
Monster orc = new Monster("오크", 100, 10, 4, 5);
orc.Show();
Monster student2;
student2.name = "고블린";
student2.hp = 80;
student2.attack = 7;
student2.defence = 2;
student2.evade = 7;
student2.Show();
}
}
}
구조체의 특징
ㆍ매개변수가 없는 생성와자 소멸자는 선언할 수 없다.
ㆍ상속을 지원하지 않는다.
ㆍ디폴트생성자를 지원하지 않는다.
ㆍ구조체의 멤버를 초기화 할 수 없다.
ㆍ구조체 내에서 초기화를 하려면 생성자를 구현하여 생성자 내에서 해야함
operator를 활용한 구조체의 연산자 정의 |
public struct Coord {
public int x;
public int y;
public Coord(int _x, int _y) {
x = _x;
y = _y;
}
public static bool operator ==(Coord c1, Coord c2) {
return c1.x == c2.x && c1.y == c2.y;
}
public static bool operator !=(Coord c1, Coord c2) {
return !(c1==c2);
}
}
반응형
'컴퓨터프로그래밍 > C#' 카테고리의 다른 글
C# - 리스트(List) (0) | 2016.12.01 |
---|---|
C# - 큐(Queue) (0) | 2016.12.01 |
C# - 제네릭 (0) | 2016.11.29 |
C# - 인터페이스 (0) | 2016.11.29 |
C# - 확장클래스, 분할메소드, 중첩클래스 (0) | 2016.11.28 |