C# 클래스
클래스를 정의할 때 데이터 유형의 청사진을 정의합니다. 이는 실제로 데이터를 정의하지는 않지만 클래스 이름이 무엇을 의미하는지, 즉 클래스의 객체가 무엇으로 구성되어 있는지, 이 객체에 대해 어떤 작업을 수행할 수 있는지 정의합니다. 객체는 클래스의 인스턴스입니다. 클래스를 구성하는 메서드와 변수는 클래스의 멤버가 됩니다.
클래스 정의
클래스 정의는 class 키워드로 시작하고 그 뒤에 클래스 이름이 옵니다. 한 쌍의 중괄호로 묶인 클래스 본문입니다. 다음은 클래스 정의의 일반적인 형식입니다.
<access specifier> class class_name { // member variables <access specifier> <data type> variable1; <access specifier> <data type> variable2; ... <access specifier> <data type> variableN; // member methods <access specifier> <return type> method1(parameter_list) { // method body } <access specifier> <return type> method2(parameter_list) { // method body } ... <access specifier> <return type> methodN(parameter_list) { // method body } }
참고:
액세스 식별자 <액세스 지정자>는 클래스와 해당 멤버에 대한 액세스 규칙을 지정합니다. 지정하지 않으면 기본 액세스 식별자가 사용됩니다. 클래스의 기본 액세스 식별자는 internal이고 멤버의 기본 액세스 식별자는 private입니다.
데이터 유형 <data type>은 변수의 유형을 지정하고, 반환 유형 <return type>은 반환된 메서드에서 반환된 데이터 유형을 지정합니다.
클래스의 멤버에 액세스하려면 점(.) 연산자를 사용하면 됩니다.
도트 연산자는 개체 이름과 멤버 이름을 연결합니다.
다음 예는 지금까지 논의된 개념을 보여줍니다.
using System; namespace BoxApplication { class Box { public double length; // 长度 public double breadth; // 宽度 public double height; // 高度 } class Boxtester { static void Main(string[] args) { Box Box1 = new Box(); // 声明 Box1,类型为 Box Box Box2 = new Box(); // 声明 Box2,类型为 Box double volume = 0.0; // 体积 // Box1 详述 Box1.height = 5.0; Box1.length = 6.0; Box1.breadth = 7.0; // Box2 详述 Box2.height = 10.0; Box2.length = 12.0; Box2.breadth = 13.0; // Box1 的体积 volume = Box1.height * Box1.length * Box1.breadth; Console.WriteLine("Box1 的体积: {0}", volume); // Box2 的体积 volume = Box2.height * Box2.length * Box2.breadth; Console.WriteLine("Box2 的体积: {0}", volume); Console.ReadKey(); } } }
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
Box1 的体积: 210 Box2 的体积: 1560
Member Functions and Encapsulation
클래스의 멤버 함수는 A입니다. 함수는 다른 변수와 마찬가지로 클래스 정의 내에 정의 또는 프로토타입을 가지고 있습니다. 클래스의 멤버로서 클래스의 모든 개체에 대해 작동할 수 있으며 개체 클래스의 모든 멤버에 액세스할 수 있습니다.
멤버 변수는 (디자인 관점에서) 객체의 속성이며 캡슐화를 위해 비공개로 유지됩니다. 이러한 변수는 공용 멤버 함수를 통해서만 액세스할 수 있습니다.
위 개념을 사용하여 클래스의 다양한 클래스 멤버의 값을 설정하고 가져옵니다.
using System; namespace BoxApplication { class Box { private double length; // 长度 private double breadth; // 宽度 private double height; // 高度 public void setLength( double len ) { length = len; } public void setBreadth( double bre ) { breadth = bre; } public void setHeight( double hei ) { height = hei; } public double getVolume() { return length * breadth * height; } } class Boxtester { static void Main(string[] args) { Box Box1 = new Box(); // 声明 Box1,类型为 Box Box Box2 = new Box(); // 声明 Box2,类型为 Box double volume; // 体积 // Box1 详述 Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0); // Box2 详述 Box2.setLength(12.0); Box2.setBreadth(13.0); Box2.setHeight(10.0); // Box1 的体积 volume = Box1.getVolume(); Console.WriteLine("Box1 的体积: {0}" ,volume); // Box2 的体积 volume = Box2.getVolume(); Console.WriteLine("Box2 的体积: {0}", volume); Console.ReadKey(); } } }
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
Box1 的体积: 210 Box2 的体积: 1560
C#의 생성자
클래스의 생성자는 클래스의 새 객체가 생성될 때 실행되는 클래스의 특수 멤버 함수입니다.
생성자 이름은 클래스 이름과 정확히 동일하며 반환 유형이 없습니다.
다음 예에서는 생성자의 개념을 보여줍니다.
using System; namespace LineApplication { class Line { private double length; // 线条的长度 public Line() { Console.WriteLine("对象已创建"); } public void setLength( double len ) { length = len; } public double getLength() { return length; } static void Main(string[] args) { Line line = new Line(); // 设置线条长度 line.setLength(6.0); Console.WriteLine("线条的长度: {0}", line.getLength()); Console.ReadKey(); } } }
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
对象已创建 线条的长度: 6
기본 생성자 에는 매개 변수가 없습니다. 하지만 매개변수를 가질 수 있는 매개변수가 있는 생성자가 필요한 경우 이러한 종류의 생성자를 매개변수화 생성자라고 합니다. 이 기술은 개체를 생성하는 동안 개체에 초기 값을 할당하는 데 도움이 될 수 있습니다. 자세한 내용은 다음 예를 참조하세요.
using System; namespace LineApplication { class Line { private double length; // 线条的长度 public Line(double len) // 参数化构造函数 { Console.WriteLine("对象已创建,length = {0}", len); length = len; } public void setLength( double len ) { length = len; } public double getLength() { return length; } static void Main(string[] args) { Line line = new Line(10.0); Console.WriteLine("线条的长度: {0}", line.getLength()); // 设置线条长度 line.setLength(6.0); Console.WriteLine("线条的长度: {0}", line.getLength()); Console.ReadKey(); } } }
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
对象已创建,length = 10 线条的长度: 10 线条的长度: 6
Destruction in C# 함수
클래스의 소멸자는 클래스의 객체가 범위를 벗어날 때 실행되는 클래스의 특수 멤버 함수입니다.
소멸자 이름에는 클래스 이름 앞에 물결표(~)가 붙습니다. 이는 값을 반환하지 않으며 매개 변수를 사용하지 않습니다.
소멸자는 프로그램을 종료하기 전에 리소스를 해제하는 데 사용됩니다(예: 파일 닫기, 메모리 해제 등). 소멸자는 상속되거나 오버로드될 수 없습니다.
다음 예에서는 소멸자의 개념을 보여줍니다.
using System; namespace LineApplication { class Line { private double length; // 线条的长度 public Line() // 构造函数 { Console.WriteLine("对象已创建"); } ~Line() //析构函数 { Console.WriteLine("对象已删除"); } public void setLength( double len ) { length = len; } public double getLength() { return length; } static void Main(string[] args) { Line line = new Line(); // 设置线条长度 line.setLength(6.0); Console.WriteLine("线条的长度: {0}", line.getLength()); } } }
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
对象已创建 线条的长度: 6 对象已删除
C# 클래스의 정적 멤버
static 키워드를 사용하여 클래스 멤버를 정적으로 정의할 수 있습니다. 클래스 멤버를 정적으로 선언하면 클래스의 개체 수에 관계없이 정적 멤버의 복사본은 하나만 남게 됩니다.
키워드 static은 클래스에 이 멤버의 인스턴스가 하나만 있음을 의미합니다. 정적 변수는 클래스의 인스턴스를 생성하지 않고 클래스를 직접 호출하여 값을 얻을 수 있기 때문에 상수를 정의하는 데 사용됩니다. 정적 변수는 멤버 함수 또는 클래스 정의 외부에서 초기화될 수 있습니다. 클래스 정의 내에서 정적 변수를 초기화할 수도 있습니다.
다음 예에서는 정적 변수의 사용법을 보여줍니다.
using System; namespace StaticVarApplication { class StaticVar { public static int num; public void count() { num++; } public int getNum() { return num; } } class StaticTester { static void Main(string[] args) { StaticVar s1 = new StaticVar(); StaticVar s2 = new StaticVar(); s1.count(); s1.count(); s1.count(); s2.count(); s2.count(); s2.count(); Console.WriteLine("s1 的变量 num: {0}", s1.getNum()); Console.WriteLine("s2 的变量 num: {0}", s2.getNum()); Console.ReadKey(); } } }
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
s1 的变量 num: 6 s2 的变量 num: 6
멤버 함수를 static로 선언할 수도 있습니다. 이러한 함수는 정적 변수에만 액세스할 수 있습니다. 객체가 생성되기 전에 정적 함수가 존재합니다. 다음 예에서는 정적 함수의 사용을 보여줍니다.
using System; namespace StaticVarApplication { class StaticVar { public static int num; public void count() { num++; } public static int getNum() { return num; } } class StaticTester { static void Main(string[] args) { StaticVar s = new StaticVar(); s.count(); s.count(); s.count(); Console.WriteLine("变量 num: {0}", StaticVar.getNum()); Console.ReadKey(); } } }
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
变量 num: 3