構成C#

WBOY
WBOYオリジナル
2024-09-03 15:04:37695ブラウズ

次の記事では、Composition C# の概要を説明します。 C# のクラス間には 2 種類の関係があります。最初のタイプの関係は「is a relationship」と呼ばれ、継承メカニズムを使用します。 2 番目の種類の関係は 2 つのクラス間の関係であり、2 つのサブタイプがあります。最初のタイプは「関係がある」と呼ばれます。

このタイプの関係では、異なるクラスの 1 つ以上のオブジェクトが関連クラスで宣言されます。ここで、さらに 2 つの部門、つまり集約と合成が登場します。集約では、ネストされたオブジェクトは、クラスの不可欠な部分でなくても、クラス内に独立して存在できます。一方、合成では、ネストされたオブジェクトまたは単数のネストされたオブジェクトがクラスを補完するため、そのオブジェクトまたはその存在なしではクラスは考えられなくなります。

C# での合成の構文

前述の構文を以下に示します。

class Training
{
// class body
}
public class Course
{
Project project = new Project();
// body
}

C# でのコンポジションの仕組み

  • C# の合成は、2 つのクラス間に 1 つ以上のネストされたオブジェクトが関連するクラスの一部であるという関係を作成する方法であり、ネストされたオブジェクトがなければクラスの論理的な存在は不可能になります。
  • たとえば、Car というクラスを考えると、クラス「Engine」のインスタンスが 1 つあるはずです。さらに、クラス「Wheel」の他の 4 つのインスタンスも必要です。
  • これらのインスタンスのいずれかを削除すると、車は機能しなくなります。

C# の構成例

以下はコンポジション C# の例です:

例 #1

トレーニング クラスを考慮すると、2 つのコースが説明されます。現在、コースはコース クラスの説明に使用されています。したがって、トレーニング クラスは 2 つのコース インスタンスなしでは存在できません。これらのインスタンスは両方ともコース クラスの一部であるためです。さらに、コース クラスのこれらのインスタンスはどちらもトレーニング クラスの一部でもあります。

コード:

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();
}
}
}

出力:

構成C#

例 #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......");
}
}
}

出力:

構成C#

例 #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# コーディングにおける合成の適用を理解するために、複数の例を検討しました。

以上が構成C#の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。