c concepts constructor
이 자습서에서는 생성자, 소멸자, 정적 클래스, 구조체 및 열거 형과 같은 C # 프로그래밍의 몇 가지 중요한 개념을 설명합니다.
객체 및 클래스에 대한 이전 자습서 중 하나에서 클래스와 객체가 무엇인지 배웠습니다.
객체는 실제 객체와 유사하며 클래스는 유사한 종류의 객체의 논리적 모음입니다. C #에있는 가장 기본적인 유형 중 하나입니다. 이 자습서에서는 다른 관련 C # 개념에 대해 자세히 알아 봅니다.
이 튜토리얼에서는 수업의 몇 가지 중요한 측면에 대해 배우고 프로그램에서 어떻게 사용할 수 있는지 알아 봅니다. 이전 자습서에서 배운 개념을 기반으로 간단한 C # 프로그램을 만들려고합니다.
학습 내용 :
- C #의 생성자는 무엇입니까?
- C #의 소멸자
- 클래스의 정적 멤버
- C #의 정적 클래스
- C #의 구조체
- 구조체와 클래스의 차이점
- 구조 : 정의
- C #의 열거 형
- C #의 속성
- 결론
- 추천 도서
C #의 생성자는 무엇입니까?
생성자는 지정된 클래스의 개체가 생성 될 때 자동으로 호출되거나 호출되는 C # 프로그래밍 언어의 특수한 유형의 메서드입니다.
주요 기능은 새로 생성 된 객체의 데이터 멤버를 초기화하는 것입니다. 생성자의 가장 독특한 기능 중 하나는 이름입니다. 클래스와 이름이 같습니다.
생성자는 기본적으로 두 가지 유형입니다.
- 기본
- 매개 변수화
C # 기본 생성자
이름에서 알 수 있듯이 기본 생성자는 클래스의 기본 생성자입니다. 인수가 없으며 객체 생성시 직접 호출됩니다.
public class Program { public Program(){ Console.WriteLine('Constructor has been invoked'); } public static void Main(string() args) { Program p = new Program(); } }
다음 프로그램의 출력은 다음과 같습니다.
생성자가 호출되었습니다.
설명
“Program”클래스 안에 생성자“Program”을 정의했습니다. 이제 main 메소드 내에서 클래스를 초기화하면 생성자가 자동으로 호출됩니다.
따라서 생성자 내부에 보관 한 코드 조각이 호출됩니다. 여기에서 생성자 중괄호 안에 '생성자가 호출되었습니다'라는 메시지를 인쇄 했으므로 클래스를 초기화하면 기본적으로 생성자가 초기화되고 메시지가 출력으로 인쇄됩니다.
매개 변수화 된 생성자
이름에서 알 수 있듯이 매개 변수화 된 생성자는 매개 변수가있는 생성자입니다. 이러한 생성자는 객체에 다른 값을 전달하는 데 사용됩니다.
public class Details { public Details(int a, int b){ int c = a+b; Console.WriteLine('The sum is: '+ c); } } public class Program { public static void Main(string() args) { Details d = new Details(2, 3); } }
다음 프로그램의 출력은 다음과 같습니다.
IT 관리 소프트웨어 및 모니터링 도구
합계 : 5
설명
기본 생성자가있는 이전 예제에서는 동일한 클래스에 기본 메서드가 있습니다. 이 예제에서 우리는 다른 클래스에 main 메소드를 가지고 있습니다.
두 개의 정수 값을 허용하는 매개 변수화 된 생성자를 포함하는 'Details'라는 클래스가 하나 있습니다. 생성자 내부에서 정수의 합계를 인쇄합니다. 우리는 메인 메소드를 포함하는“Program”이라는 또 다른 클래스가 있습니다. 메인 메서드 내에서 'Details'클래스를 초기화했습니다.
앞에서 설명한 것처럼 클래스가 초기화되면 생성자가 자동으로 호출됩니다. 따라서이 경우 생성자 메서드 'Details'가 호출되었으며 초기화 중에 매개 변수를 전달하면 출력이 인쇄됩니다.
C #의 소멸자
소멸자는 생성자의 반대입니다. 클래스 개체가 범위를 벗어날 때 호출되는 클래스의 특수 메서드입니다. 생성자와 유사하게 소멸자 이름도 클래스 이름의 이름과 정확히 동일하지만 접두사 '~'(물결표)가 있습니다.
소멸자는 매개 변수를받지 않고 값을 반환하지 않습니다. 소멸자는 클래스 객체를 파괴하므로 주로 프로그램이 실행 된 후 메모리를 해제하는 데 사용됩니다. 소멸자에 대해 주목해야 할 또 다른 중요한 점은 오버로드되거나 상속 될 수 없다는 것입니다.
소멸자의 예 :
public class Program { public Program(){ Console.WriteLine('Constructor has been invoked'); } ~Program(){ Console.WriteLine('Destructor has been invoked'); } public static void Main(string() args) { Program p = new Program(); } }
다음 프로그램의 출력은 다음과 같습니다.
생성자가 호출되었습니다.
소멸자가 호출되었습니다.
설명
생성자를 배우는 데 사용한 것과 동일한 예제를 사용했습니다. 프로그램 클래스 (~ Program)에 소멸자를 추가했습니다. 클래스의 객체를 초기화하면 생성자가 호출되고 클래스의 객체가 생성됩니다. 그러면 콘솔에 'Constructor has been invoked'라는 문구가 인쇄됩니다.
실행이 완료되고 클래스 객체가 범위를 벗어나면 프로그램은 소멸자로 이동합니다. 그런 다음 소멸자가 호출되어 개체가 소멸됩니다. 여기에서는 소멸자가 호출 된 후 콘솔에 출력되는 메시지를 소멸자 내부에 인쇄했습니다.
클래스의 정적 멤버
클래스의 멤버는 static 키워드를 사용하여 static으로 선언 될 수 있습니다. 개체가 정적으로 선언되면 생성 된 개체 수에 관계없이 정적 개체의 복사본이 하나만 있습니다.
정적이라는 것은 주어진 클래스에 대해 존재할 멤버의 단일 인스턴스가 있음을 의미합니다. 이는 클래스 내부의 정적 함수 또는 변수의 값을 개체를 만들지 않고도 호출 할 수 있음을 의미합니다.
정적 변수는 인스턴스를 생성하는 대신 클래스를 호출하여 직접 값을 얻을 수 있으므로 상수를 선언하는 데 사용됩니다.
예:
public class Details { public static void stat(){ Console.WriteLine('Static method invoked'); } } public class Program { public static void Main(string() args) { Details.stat(); } }
다음 프로그램의 출력은 다음과 같습니다.
Windows 7을위한 최고의 DVD 리퍼
호출 된 정적 메서드
설명
위의 예에서는 정적 메서드 'stat'를 포함하는 'Details'클래스를 만들었습니다. 우리는 main 메소드를 포함하는 또 다른 클래스“Program”을 가지고 있습니다. 이전 주제에서 메서드에 액세스하기 위해 클래스를 초기화하는 방법을 살펴 보았습니다. 그러나 우리가 논의했듯이 클래스의 정적 멤버는 클래스 객체 초기화를 통해 액세스 할 수 있습니다.
따라서 main 메소드에서는 객체를 생성하지 않고 직접 클래스를 사용하여 메소드를 호출했습니다. 프로그램의 출력은 정적 메서드 내부에 작성된 코드를 실행했습니다. 이 경우 콘솔에 메시지를 인쇄했습니다.
C #의 정적 클래스
정적 클래스는 C #의 일반 클래스와 유사합니다. 정적 클래스는 정적 멤버 만 가질 수 있으며 인스턴스화 할 수 없습니다. 정적 클래스는 클래스가 인스턴스화되지 않았는지 확인하는 데 사용됩니다. 정적 클래스는 선언 중에 키워드 클래스 앞에 static 키워드를 사용하여 선언됩니다.
예:
public static class Details { public static void multiply(int a, int b){ int c = a*b; Console.WriteLine('Multiplication result is: '+c); } } public class Program { public static void Main(string() args) { Details.multiply(2,8); } }
다음 프로그램의 출력은 다음과 같습니다.
곱셈 결과 : 16
설명
위의 예에서는 정적 클래스 'Details'를 만들고 정적 클래스 내부에 또 다른 정적 메서드 'multiply'를 만들었습니다. 메서드 내부에는 실행하려는 코드 스 니펫이 있습니다. 우리는 또한 main 메소드를 가진 또 다른 클래스“Program”을 가지고 있습니다.
메인 메서드 내에서 정적 클래스 안에있는 multiply 메서드를 호출했습니다. 우리의 메인 메소드를 살펴보면, 우리가 메인 메소드에서 직접 클래스를 호출 한 대신 정적 클래스에 대한 객체를 초기화하거나 생성하지 않았 음을 알 수 있습니다.
따라서 클래스 이름을 사용하고 매개 변수를 제공하여 multiply 메소드를 직접 호출하면 코드를 실행하고 출력을 인쇄합니다.
C #의 구조체
C #의 값 형식 엔터티를 구조라고합니다. 사용자가 여러 데이터 유형의 관련 데이터를 단일 변수에 저장할 수 있도록 도와줍니다. 언급했듯이 구조는 필드, 메서드, 생성자, 연산자, 이벤트 등을 보유하는 값 유형 엔터티입니다. 구조는 'struct'키워드를 사용하여 선언됩니다.
Structs의 특징 :
- 상수, 메서드, 속성, 인덱스, 연산자, 생성자 등을 포함 할 수 있습니다.
- 기본 생성자를 가질 수 없습니다.
- 인터페이스를 구현할 수 있지만 다른 구조체 또는 클래스와 함께 상속 할 수 없습니다.
- 사용을 위해 새 키워드를 사용하여 구조체를 초기화해야합니다.
구조체와 클래스의 차이점
Struct와 Class는 어떤면에서 비슷하게 느껴질 수 있지만 몇 가지 차이점이 있습니다.
차이점은 다음과 같습니다.
- 구조체는 값 유형이고 클래스는 참조 유형입니다.
- 구조체를 초기화하려면 new 키워드가 필요합니다.
- 구조체는 매개 변수화 된 생성자 만 가질 수 있고 반면에 클래스는 기본 생성자와 매개 변수화 된 생성자를 모두 가질 수 있습니다.
구조 : 정의
struct 키워드를 사용하여 구조를 정의 할 수 있습니다. 구조체는 프로그램에 대해 여러 다른 멤버를 사용하여 새 데이터 유형을 정의 할 수 있습니다.
구조체는 객체 초기화와 유사한 방식으로 즉 new 키워드를 사용하여 초기화 할 수 있습니다. 구조체는 값 유형 엔터티이므로 클래스 개체보다 작동하는 것이 더 빠릅니다. 데이터를 저장할 필요가있을 때마다 구조체를 사용해야합니다. 반면에 데이터를 전송해야하는 경우 구조체보다 클래스를 사용하는 것이 좋습니다.
예:
public struct Cuboid { public int length; public int width; public int height; } public class Program { public static void Main(string() args) { Cuboid cb = new Cuboid(); cb.length = 10; cb.width = 20; cb.height = 30; Console.WriteLine('The volume of cuboid is: {0}', (cb.length*cb.width*cb.height)); } }
다음 프로그램의 출력은 다음과 같습니다.
입방체의 부피 : 6000
설명
위의 예에서는 입방체의 길이, 너비, 높이에 대한 데이터 유형을 저장 한 내부에 입방체 구조체를 정의했습니다. 우리는 우리의 주요 방법이있는 또 다른 수업 프로그램이 있습니다.
main 메서드에서는 new 키워드를 사용하여 'Cuboid'구조체를 초기화합니다. 그런 다음 객체를 사용하여 구조체에 저장된 데이터 유형을 호출하고 값을 할당했습니다. 그런 다음 구조체의 변수에 대한 작업을 수행하고 결과를 콘솔에 인쇄했습니다.
따라서 속성, 이벤트 또는 메서드를 사용하려면 new 키워드를 사용하여 구조체를 초기화해야합니다. 그렇지 않으면 컴파일 오류가 발생합니다.
C #의 열거 형
Enum은 정수 상수의 집합이며 구조체와 유사하며 값 유형 엔터티이기도합니다. 주로 네임 스페이스, 클래스 또는 구조체 내에서 'enum'키워드를 사용하여 정수 목록을 선언하는 데 사용됩니다. 열거 형에서는 정수 상수 각각에 이름을 제공하므로 각각의 이름을 사용하여 참조 할 수 있습니다.
Enum은 고정 된 수의 상수를 가질 수 있습니다. 안전을 향상시키는 데 도움이되며 횡단 할 수도 있습니다.
Enum의 특징
- Enum은 상수에 의미있는 이름을 제공하여 코드의 가독성과 유지 관리 성을 향상시킵니다.
- Enum은 문자열 유형 상수와 함께 사용할 수 없습니다.
- Enum은 int, long, short, byte 등과 같은 상수를 포함 할 수 있습니다.
- 기본적으로 열거 형 상수 값은 0으로 시작합니다.
열거 형 선언
enum 선언 구문은 다음과 같습니다.
enum { list of integer constants };
모든 열거 형 상수에는 기본값이 있습니다. 값은 0에서 시작하여 하나씩 위로 이동합니다.
예:
public enum Cuboid{ length, width, height } public class Program { public static void Main(string() args) { int l = (int)Cuboid.length; int w = (int)Cuboid.width; int h = (int)Cuboid.height; Console.WriteLine('The length is :{0}”, l); Console.WriteLine('The width is :{0}”, w); Console.WriteLine('The height is :{0}”, h); } }
다음 프로그램의 출력은 다음과 같습니다.
길이 : 0
너비 : 1
높이 : 2
설명
우리는 struct에서 배운 유사한 예제로 작업했습니다. 이 예에서는 Cuboid라는 열거 형을 만들었습니다. 이 열거 형에는 길이, 너비 및 높이의 세 가지 멤버가 포함됩니다.
우리는 메인 메소드가있는 또 다른 클래스 Program이 있습니다. 열거 형 변수를 정수형으로 변환하기 위해 명시 적 캐스트가 사용 된 다음, 그 값을 main 메서드 내의 다른 변수에 저장하고 콘솔에 인쇄했습니다.
기본적으로 첫 번째 열거 형의 값은 0이되고 두 번째 열거 형의 값은 1이됩니다. 따라서 값을 인쇄 할 때 앞서 언급 한 출력을 받았습니다.
Enum 값 변경
Enum을 사용하면 사용자가 멤버의 기본 시작 인덱스를 변경할 수도 있습니다. 변수의 시작 인덱스를 변경하면 후속 멤버의 값이 증분 순서로 업데이트됩니다.
이전 예제에서 정의한 열거 형의 첫 번째 멤버에 값을 할당하고 어떤 일이 발생하는지 살펴 보겠습니다.
public enum Cuboid { length = 10, width, height } public class Program { public static void Main(string() args) { int l = (int)Cuboid.length; int w = (int)Cuboid.width; int h = (int)Cuboid.height; Console.WriteLine('The length is :{0}”, l); Console.WriteLine('The width is :{0}”, w); Console.WriteLine('The height is :{0}”, h); } }
다음 프로그램의 출력은 다음과 같습니다.
길이 : 10
너비 : 11
높이 : 12
설명
열거 형의 첫 번째 멤버에 값을 할당하면 모든 후속 열거 형 멤버가 해당 값의 증가분으로 할당됩니다. 정의한대로 첫 번째 값은 10, 후속 값은 11, 다음 값은 12가됩니다.
사용자는 자신의 선택에 따라 모든 값을 할당 할 수 있으며 열거 형의 모든 멤버는 사용자 정의 값의 증분에 따라 자동 할당됩니다.
C #의 속성
C #의 속성은 기본적으로 인터페이스, 클래스 및 구조체의 명명 된 멤버입니다. 속성은 구조체 또는 클래스의 멤버 변수 / 메서드의 확장입니다. 개인 필드의 값을 읽거나 쓰거나 변경하는 데 사용됩니다.
속성은 필드처럼 액세스됩니다. 값을 가져오고 설정하고 계산하는 데 사용할 수있는 접근자가 있습니다. 속성에 값을 설정하는 동안 논리를 넣을 수도 있습니다. 외부로부터의 접근을 제한하는 private 클래스와 함께 사용할 수도 있지만, 동시에 사용자가 값을 가져 오거나 설정하는 데 속성을 사용할 수 있습니다.
접근자는 무엇입니까?
속성의 접근자는 주어진 속성을 읽거나 쓰거나 계산하는 데 사용할 수있는 문을 구성합니다. 속성 선언에는 get, set 또는 둘 다를 포함 할 수 있습니다.
예:
public class Cube { private int side; //Declare a Side property of type integer public int Side{ get{ return side; } set{ side = value; } } } public class Program { public static void Main(string() args) { Cube cb = new Cube(); cb.Side = 5; Console.WriteLine('The volume of cube is :{0}', (cb.Side * cb.Side* cb.Side)); } }
위의 코드 조각이 성공적으로 컴파일 및 실행되면 다음 출력이 관찰됩니다.
큐브의 부피 : 125
설명
위의 예에서는 정수 유형의 'Side'속성을 선언 한 내부에 'Cube'클래스가 있습니다. 그 후, 우리가 반환하고 변수 측에 값을 제공 한 속성을 가져오고 설정합니다.
경험이 풍부한 j2ee 인터뷰 질문 및 답변
우리는 Cube 클래스를 초기화하고 Side 속성에 대한 값을 제공 한 main 메서드가있는 또 다른 클래스 'Program'이 있으며 계산 된 결과를 콘솔에 인쇄했습니다.
결론
이 튜토리얼에서 우리는 클래스의 멤버 함수에 대해 배웠습니다. 멤버 함수는 존재하는 클래스의 모든 개체에서 작동 할 수 있습니다. 생성자와 소멸자에 대해서도 배웠습니다.
생성자는 클래스 개체 생성시 자동으로 초기화되는 반면 소멸자는 클래스를 파괴하며 주로 실행 완료 후 메모리 할당을 제거하는 데 사용됩니다. 생성자는 두 가지 유형, 즉 기본값과 매개 변수가있을 수 있습니다.
소멸자는 매개 변수를 허용하지 않으며 값을 반환하지도 않습니다. 생성자와 소멸자 모두 클래스 이름과 정확히 동일한 이름을가집니다. 또한 정적 변수와 정적 클래스, 그리고 클래스 인스턴스를 사용하지 않고 액세스 할 수있는 방법에 대해서도 배웠습니다. 정적 클래스는 정적 멤버 만 가질 수 있다는 것을 알게되었습니다.
Structs 또는 구조에 대해서도 논의했습니다. Structs는 값 유형 엔티티이며 액세스를 위해 초기화해야합니다.
C #의 열거 형 및 속성에 대해서도 설명했습니다. Enum은 명명 된 정수 상수의 집합입니다. 구조체와 마찬가지로 값 유형 엔터티이기도합니다. 열거 형에는 해당 멤버가 있고 각 멤버에는 고유 한 기본값이 있습니다.
마지막으로 구조체 또는 클래스의 멤버 변수 / 메소드를 확장 한 속성에 대해 설명했습니다. 개인 필드의 값을 가져 오거나 설정하거나 변경하는 데 사용됩니다.