Programming/C# - Window

C#/ 클래스 기본

esoog Polaris 2023. 6. 28. 00:02
using System;
namespace Constructor
{
class Cat
{
// 클래스 내의 객체는 필드와 메서드로 구성
// 클래스 내 변수들은 필드, 메서드는 기능 구현
// 클래스 내 모든 요소들을 멤버라 함.
public Cat()
// 클래스 명과 같은 생성자 함수()
{
Name = "";
Color = "";
}
public Cat(string _Name, string _Color)
// 생성자 달리 해서 오버로딩 가능.
{
Name = _Name;
Color = _Color;
}
~Cat()
// ~클래스이름() 은 종료자. 단, 사용 할 필요가 없음.
{
Console.WriteLine($"{Name} : 잘가");
}
public string Name;
// *참고로 C#에서 접근한정자 수식 않으면 클래스 멤버는 무조건 private!
public string Color;
public void Meow(string Name)
{
this.Name = Name;
// 객체 내부에서 자신의 필드나, 메서드 접근시 this. 키워드.
Console.WriteLine($"{Name} : 야옹");
}
}
class MainApp
{
static void Main(string[] args)
{
Cat kitty = new Cat("키티", "하얀색");
// 클래스 객체 생성시 new 클래스(); 에서 () 는 기본 생성자를 말함.
// 클래스 선언 시 명시적으로 생성자를 구현 않으면, 컴파일러에서 기본생성자 자동 생성.
// 단, 생성자를 하나라도 직접 정의하면 기본생성자 제공 안함.
kitty.Meow("하이");
// 비정적 메서드(인스턴스 메서드) : 클래스 인스턴스 생성해야만 사용 할 수 있는.
Console.WriteLine($"{kitty.Name} : {kitty.Color}");
Cat nero = new Cat("네로", "검은색");
nero.Meow("헬로우");
Console.WriteLine($"{nero.Name} : {nero.Color}");
}
}
}
-------------------------------------------------------------------------------------------
using System;
class Global
{
public static int Count = 0;
// 클래스의 객체(인스턴스)를 static 한정자로 키워드를 붙이면,
// 클래스 자체에 소속되게 하여, 객체를 생성않고 클래스 필드로 사용 가능.
}
class ClassA
{
public ClassA()
{
Global.Count++;
// 클래스 .의 필드로 직접 접근.
}
}
partial class ClassB
// partial 키워드는 하나의 클래스를 여러 클래스로 나눠서 구현 가능. 길어질 경우 소스코드 관리 편의 제공.
{
public ClassB()
{
Global.Count++;
}
}
partial class ClassB
{
public ClassB(string minus) : this()
// 생성자도 중복을 피해 this()로서 객체 자신의 생성자를 호출해서 사용 할 수 있음(생성자에서만)
{
// this() 생성자를 호출하므로 Global.Count++;도 함께 구현됨.
Global.Count--;
}
}
class MainApp
{
static void Main()
{
Console.WriteLine($"Global.Count : {Global.Count}");
new ClassA();
new ClassA();
new ClassB();
new ClassB("this() 생성자 역할");
Console.WriteLine($"Global.Count : {Global.Count}");
}
}
view raw MainApp.cs hosted with ❤ by GitHub
반응형

'Programming > C# - Window' 카테고리의 다른 글

C#/ 오버라이딩(overriding)  (0) 2023.06.28
C#/ 클래스 상속  (0) 2023.06.28
C#/ 오버로딩·매개변수 사용  (0) 2023.06.28
C#/ 한정자  (0) 2023.06.27
C#/ for 반복문  (0) 2023.06.27