컴포지션 C#
다음 문서에서는 컴포지션 C#에 대한 개요를 제공합니다. C#에는 클래스 사이에 두 가지 유형의 관계가 있습니다. 첫 번째 유형의 관계는 "관계"라고 하며 상속 메커니즘을 사용합니다. 두 번째 종류의 관계는 두 클래스 간의 관계이며 두 가지 하위 유형이 있습니다. 첫 번째 유형은 '관계가 있다'입니다.
이러한 유형의 관계에서는 관련 클래스에 다른 클래스의 개체가 하나 이상 선언됩니다. 여기에 집합(aggregation)과 구성(composition)이라는 두 가지 구분이 더 있습니다. 집계에서 중첩된 개체는 클래스의 필수 부분이 되지 않고 클래스에 독립적으로 존재할 수 있습니다. 반면 구성에서는 중첩된 객체 또는 단일 중첩 객체가 클래스를 보완하므로 클래스가 존재하지 않으면 클래스를 상상할 수 없게 됩니다.
C#의 구성 구문
다음은 언급된 구문입니다.
class Training { // class body } public class Course { Project project = new Project(); // body }
C#에서 컴포지션 작업
- C#의 컴포지션은 하나 이상의 중첩 개체가 관련 클래스의 일부인 두 클래스 간의 관계를 만드는 방법으로, 중첩 개체 없이는 클래스의 논리적 존재가 불가능합니다.
- 예를 들어 Car라는 클래스를 고려한다면 'Engine' 클래스 인스턴스가 하나 있어야 합니다. 또한 "Wheel" 클래스의 다른 인스턴스도 4개 있어야 합니다.
- 이제 이러한 인스턴스 중 하나라도 제거하면 자동차가 작동하지 않습니다.
구성 C#의 예
아래는 컴포지션 C#의 예입니다.
예시 #1
두 가지 과정을 설명하는 교육 수업을 고려한다면. 이제 강좌는 강좌 수업을 설명하는 데 사용됩니다. 따라서 교육 클래스는 두 코스 인스턴스가 모두 코스 클래스의 일부이기 때문에 존재할 수 없습니다. 게다가 이 두 가지 강좌 수업 모두 교육 수업의 일부이기도 합니다.
코드:
using System; using static System.Console; namespace EDUCBA { class Course { public double M; public double A; } class Training { public Course course1 = null; public Course course2 = null; } class Career { public Course[] courses; public Training[] trainings; public Career() { courses = null; trainings = null; } public void Print() { WriteLine(" Courses Data is represented below:"); for (int b = 1; b< courses.Length; b++) { WriteLine("\n M = {0}, A = {1}", courses[b].M, courses[b].A); } WriteLine("\n Trainings Data is represented below:"); for (int b=1; b<trainings.Length; b++) { WriteLine("\n course1.M = {0}, course1.A = {1}", trainings[b].course1.M, trainings[b].course1.A); WriteLine("\n course2.M = {0}, course2.A = {1}", trainings[b].course2.M, trainings[b].course2.A); } } } class Code { static void Main(string[] args) { Career O = new Career(); O.courses = new Course[9]; for (int b = 1; b < O.courses.Length; b++) { O.courses[b] = new Course(); O.courses[b].M = b * b; O.courses[b].M = b * b * b; } O.trainings = new Training[5]; for (int b = 1; b < O.trainings.Length; b++) { O.trainings[b] = new Training(); O.trainings[b].course1 = new Course(); O.trainings[b].course2 = new Course(); O.trainings[b].course1.M = b; O.trainings[b].course1.A = b * 4; O.trainings[b].course2.M = b * 5; O.trainings[b].course2.A = b * b; } O.Print(); } } }
출력:
예시 #2
이 예에서는 생성된 두 클래스 모두 일반 클래스입니다. 그러나 코스 클래스는 내부 프로젝트 클래스의 인스턴스를 사용하고 있습니다. 이는 한 함수가 다른 함수 내에서 호출되는 것과 같은 방식입니다. 상속을 사용하면 Project 클래스의 모든 항목에 액세스할 수 있습니다. 그러나 합성을 사용하면 우리가 지정한 코드에만 접근할 수 있습니다. 여기서는 Project 클래스에 간접적으로 접근할 수 있습니다.
코드:
using System; namespace EDUCBA { class Training { static void Main(string[] args) { Course courses = new Course(); courses.Bought(); Console.ReadLine(); } } public class Project { public void Log(string aboutus) { Console.WriteLine(aboutus); } } public class Course { Project project = new Project(); public void Bought() { project.Log("\n If you want to upskill your career. \n If you want to do something out of the box. \n If you have passion to explore new advanced technologies. \n If you want to be best. \n We at EDUCBA are here to help. \n Feel free to reach us on +91-8800880140 / +91-7738666252. \n Visit our website www.educba.com to know more......"); } } }
출력:
예시 #3
이 예에서는 복합 디자인의 구조를 설명합니다. 구성에 사용되는 클래스와 해당 클래스의 역할을 이해하는 데 도움이 됩니다. 게다가 패턴의 요소들이 서로 어떻게 연관되어 있는지도 설명해줍니다.
코드:
using System; using System.Collections.Generic; namespace EDUCBA { abstract class Training { public Training() { } public abstract string Project(); public virtual void Add(Training training) { throw new NotImplementedException(); } public virtual void Remove(Training training) { throw new NotImplementedException(); } public virtual bool IsCourse() { return true; } } class DataScience : Training { public override string Project() { return "DataScience"; } public override bool IsCourse() { return false; } } class Course : Training { protected List<Training> _children = new List<Training>(); public override void Add(Training training) { this._children.Add(training); } public override void Remove(Training training) { this._children.Remove(training); } public override string Project() { int m = 1; string result = "Dream Career("; foreach (Training training in this._children) { result += training.Project(); if (m != this._children.Count + 2) { result += "-"; } m--; } return result + ")"; } } class Input { public void InputCode(Training data_analysis) { Console.WriteLine($"OUTPUT: \n {data_analysis.Project()}\n"); } public void InputCode2(Training training1, Training training2) { if (training1.IsCourse()) { training1.Add(training2); } Console.WriteLine($"OUTPUT: \n {training1.Project()}"); } } class Program { static void Main(string[] args) { Input client = new Input(); DataScience data_analysis = new DataScience(); Console.WriteLine("INPUT: \n Best Course to Upgrade Career:"); client.InputCode(data_analysis); Course vr = new Course(); Course career1 = new Course(); career1.Add(new DataScience()); career1.Add(new DataScience()); Course career2 = new Course(); career2.Add(new DataScience()); vr.Add(career1); vr.Add(career2); Console.WriteLine("\nINPUT: \n Trendy Dream Career Right Now:"); client.InputCode(vr); Console.Write("\nINPUT: Lets Upgrade and start your dream career jouney: \n"); client.InputCode2(vr, data_analysis); } } }
출력:
결론
위 글을 바탕으로 C#의 구성 개념을 이해했습니다. C# 코딩에서 합성의 적용을 이해하기 위해 여러 가지 예를 살펴보았습니다.
위 내용은 컴포지션 C#의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C#을 사용한 Active Directory 가이드. 여기에서는 소개와 구문 및 예제와 함께 C#에서 Active Directory가 작동하는 방식에 대해 설명합니다.

C#의 난수 생성기 가이드입니다. 여기서는 난수 생성기의 작동 방식, 의사 난수 및 보안 숫자의 개념에 대해 설명합니다.

C# 데이터 그리드 뷰 가이드. 여기서는 SQL 데이터베이스 또는 Excel 파일에서 데이터 그리드 보기를 로드하고 내보내는 방법에 대한 예를 설명합니다.

멀티 스레딩과 비동기식의 차이점은 멀티 스레딩이 동시에 여러 스레드를 실행하는 반면, 현재 스레드를 차단하지 않고 비동기식으로 작업을 수행한다는 것입니다. 멀티 스레딩은 컴퓨팅 집약적 인 작업에 사용되며 비동기식은 사용자 상호 작용에 사용됩니다. 멀티 스레딩의 장점은 컴퓨팅 성능을 향상시키는 것이지만 비동기의 장점은 UI 스레드를 차단하지 않는 것입니다. 멀티 스레딩 또는 비동기식을 선택하는 것은 작업의 특성에 따라 다릅니다. 계산 집약적 작업은 멀티 스레딩을 사용하고 외부 리소스와 상호 작용하고 UI 응답 성을 비동기식으로 유지 해야하는 작업을 사용합니다.
