.NET ヘルプ

C# ゲッター セッター (開発者向けの仕組み)

ゲッターとセッターは、C#のようなオブジェクト指向プログラミング言語において重要な概念です。 これらの二つのメソッドを使用すると、クラスのプロパティへのアクセスと変更を制御することができます。 このチュートリアルでは、コードブロックを使用してC#のゲッターとプライベートセッターの初心者と中級者の両方の側面を探ります。

ゲッターとセッターの紹介

ゲッターとセッターとは何ですか?

基本的に、ゲッターとセッターはクラス内で同じ名前を持つメソッドに過ぎません。 ゲッターはプライベートフィールド変数の値を返し、セッターはその重要性を変更します。 これらのメソッドは、クラスの内部データ(フィールド)が安全かつ正確にアクセスまたは変更されることを保証します。

なぜそれらが必要なのでしょうか?

次のようなpublic class carを持ち、private string description property nameがあると想像してください。 このクラスの外部の人が説明を知りたい場合、それがプライベートであるため、直接アクセスできません。 ここでゲッターとセッターの役割が登場します。

ゲッターは、private string description の値を取得することを可能にしますが、ユーザーにそれを直接変更するアクセス権を与えることはありません。 一方、セッターは設定した条件の下で、ユーザーに暗黙のパラメーター記述を変更できるようにします。

アクセス修飾子

アクセスタ修飾子は、フィールドやプロパティがクラス外部からどの程度の可視性とアクセス性を持つかを定義します。 最も一般的に使用される修飾子はpublicprivateです。

  • Public: publicで宣言されたフィールドやプロパティは、プログラム内のどこからでもアクセス可能です。 たとえば、コードのどの部分からでもアクセスおよび変更可能なpublic int ageプロパティを持っているかもしれません。
  • Private: Privateとして宣言されたプロパティまたはフィールドは、定義されたクラス内でのみアクセス可能です。例えば、private int ageです。 このカプセル化は、不正な変更を防ぎ、クラスの内部状態が適切に維持されることを保証します。

シンプルなゲッターとセッター

簡単な例から始めましょう。

//set accessor
public class Person
{
    private string name;  // This is a private string name property variable

    public string GetName()   // This is the getter
    {
        return name;
    }

    public void SetName(string newName)   // This is the setter, new value
    {
        name = newName;
    }
}

static void Main()
{
    Person person = new Person();
    person.SetName("John");
    Console.WriteLine(person.GetName());
}
//set accessor
public class Person
{
    private string name;  // This is a private string name property variable

    public string GetName()   // This is the getter
    {
        return name;
    }

    public void SetName(string newName)   // This is the setter, new value
    {
        name = newName;
    }
}

static void Main()
{
    Person person = new Person();
    person.SetName("John");
    Console.WriteLine(person.GetName());
}
'set accessor
Public Class Person
	Private name As String ' This is a private string name property variable

	Public Function GetName() As String ' This is the getter
		Return name
	End Function

	Public Sub SetName(ByVal newName As String) ' This is the setter, new value
		name = newName
	End Sub
End Class

Shared Sub Main()
	Dim person As New Person()
	person.SetName("John")
	Console.WriteLine(person.GetName())
End Sub
$vbLabelText   $csharpLabel

上記のclass Personでは、nameプロパティのために、ゲッター(GetName)とセッター(SetName)の両方を持っています。 static void Main メソッドを実行すると、セッターを使用して名前にその値を設定したため、「John」が出力されます。

自動実装プロパティ

さて、「ゲッターとセッター用に常に個別のメソッドを書かなければならないのか?」と思われるかもしれませんが、答えは「いいえ」です。C#はこれを簡素化するために「自動実装プロパティ」または「オートプロパティ」という概念を導入しました。

C#では、private フィールドとその関連プロパティを宣言するための省略記法である自動プロパティを使用できます。 Here's an example: 例があります。

public class Student
{
    public string Name { get; set; } // This is an auto-implemented or automatic property, public string Name
    public string Title {get; set;}
}

static void Main()
{
    Student student = new Student();
    student.Name = "Alice";  // Using setter
    Console.WriteLine(student.Name);  // Using getter
}
public class Student
{
    public string Name { get; set; } // This is an auto-implemented or automatic property, public string Name
    public string Title {get; set;}
}

static void Main()
{
    Student student = new Student();
    student.Name = "Alice";  // Using setter
    Console.WriteLine(student.Name);  // Using getter
}
Public Class Student
	Public Property Name() As String ' -  This is an auto-implemented or automatic property, public string Name
	Public Property Title() As String
End Class

Shared Sub Main()
	Dim student As New Student()
	student.Name = "Alice" ' Using setter
	Console.WriteLine(student.Name) ' Using getter
End Sub
$vbLabelText   $csharpLabel

Student classでは、Nameプロパティにはゲッターとセッターがあり、これらは自動実装されています。 C# コンパイラは、背後で private string name フィールドを作成し、Name プロパティがそのフィールドへのアクセスを提供します。

プロパティにおける高度なアクセス修飾子

読み取り専用プロパティ

場合によっては、外部から修正できず、読み取ることのみ可能なプロパティを提供したいことがあります。 これは読み取り専用プロパティが役立つ場面です。 プロパティでセッターを省略することにより、読み取り専用にすることができます。

例えば、Person クラスに読み取り専用の string Description プロパティを追加したいとしましょう。

public class Person
{
    public string Name { get; set; }
    public string Description { get; }

    public Person(string name, string description)
    {
        Name = name;
        Description = description;
    }
}
public class Person
{
    public string Name { get; set; }
    public string Description { get; }

    public Person(string name, string description)
    {
        Name = name;
        Description = description;
    }
}
Public Class Person
	Public Property Name() As String
	Public ReadOnly Property Description() As String

	Public Sub New(ByVal name As String, ByVal description As String)
		Me.Name = name
		Me.Description = description
	End Sub
End Class
$vbLabelText   $csharpLabel

この例では、Person クラスのコンストラクタ内でのみ Description プロパティをセットすることができ、コードが少なくて済みます。 一度設定されると、外部から変更することはできません。

プライベートセッター

時々、クラスの外部からプロパティを読み取り、クラスの内部からのみ設定できるようにしたい場合があります。 これはprivate setを使用して達成されます。

public class Program
{
    public string Description { get; private set; }

    public Program()
    {
        Description = "This is a program about getters and setters.";
    }
}

class ProgramTest
{
    static void Main()
    {
        Program myProgram = new Program();
        Console.WriteLine(myProgram.Description);  // Allowed
        // myProgram.Description = "New Description";  // Not allowed
    }
}
public class Program
{
    public string Description { get; private set; }

    public Program()
    {
        Description = "This is a program about getters and setters.";
    }
}

class ProgramTest
{
    static void Main()
    {
        Program myProgram = new Program();
        Console.WriteLine(myProgram.Description);  // Allowed
        // myProgram.Description = "New Description";  // Not allowed
    }
}
Public Class Program
	Private privateDescription As String
	Public Property Description() As String
		Get
			Return privateDescription
		End Get
		Private Set(ByVal value As String)
			privateDescription = value
		End Set
	End Property

	Public Sub New()
		Description = "This is a program about getters and setters."
	End Sub
End Class

Friend Class ProgramTest
	Shared Sub Main()
		Dim myProgram As New Program()
		Console.WriteLine(myProgram.Description) ' Allowed
		' myProgram.Description = "New Description";  // Not allowed
	End Sub
End Class
$vbLabelText   $csharpLabel

class Program内で、Descriptionプロパティはprivate setがあり、クラス外からは変更できないため、データの完全性が保証されます。

継承とオーバーライド

派生クラスを使用する場合、getterおよびsetterメソッドをオーバーライドしてその動作をカスタマイズできます。 これは、値の取得または設定時に追加のロジックを追加することを可能にします。

public class Person
{
    public virtual string Name { get; set; }
}

public class Student : Person
{
    private string studentID;

    public override string Name
    {
        get { return base.Name; }
        set
        {
            if (!string.IsNullOrEmpty(value))
                base.Name = value;
        }
    }
}
public class Person
{
    public virtual string Name { get; set; }
}

public class Student : Person
{
    private string studentID;

    public override string Name
    {
        get { return base.Name; }
        set
        {
            if (!string.IsNullOrEmpty(value))
                base.Name = value;
        }
    }
}
Public Class Person
	Public Overridable Property Name() As String
End Class

Public Class Student
	Inherits Person

	Private studentID As String

	Public Overrides Property Name() As String
		Get
			Return MyBase.Name
		End Get
		Set(ByVal value As String)
			If Not String.IsNullOrEmpty(value) Then
				MyBase.Name = value
			End If
		End Set
	End Property
End Class
$vbLabelText   $csharpLabel

この例では、StudentクラスはPersonから継承し、Nameプロパティのセッターをオーバーライドします。 名前を設定する前に検証チェックを追加し、それが空やnullでないことを確認します。

Iron SuiteでC#開発を強化する

Iron Suiteは、C#開発能力を大幅に向上させる研究開発ツールのコレクションです。 それには IronPDF、IronXL、IronOCR、および IronBarcode が含まれています。 これらの各ツールは独自の目的を持ち、C#のさまざまな側面に統合することができます。

IronPDF - 強力なPDF管理ツール

IronPDFについてさらに詳しく学ぶ。これは、開発者がC#でPDFドキュメントを作成、読み取り、編集できるライブラリです。 HTMLをPDFに変換する場合でも、PDFのメタデータをゲッターとセッターで管理する場合でも、IronPDFはあなたをカバーします。

IronPDFは、元のレイアウトとスタイルを正確に保持してHTMLからPDFへの変換に優れています。 それは、レポート、請求書、およびドキュメントなどのWebベースのコンテンツからPDFを作成するのに最適です。 IronPDFはHTMLファイル、URL、生のHTML文字列をサポートしており、簡単に高品質なPDFドキュメントを生成します。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronXL - Excel操作が簡単に

Excelファイルを操作する際、IronXL Excel Libraryは読み書きのプロセスを簡素化します。 このツールは、Excelファイルのプライベートおよびパブリック文字列または整数を操作するために使用できます。これは、C#のゲッターとセッターの同じ構文を使用してクラス内のデータを処理する方法に似ています。

IronOCR - C#での光学文字認識

IronOCR を探索し、画像を検索可能なテキストに変換する光学式文字認識ライブラリです。 お客様のアプリケーションがスキャンされたドキュメントからテキストを読み取る必要がある場合、IronOCRの強力な機能を簡単に統合できます。 それは、前の例のセットアップにあるクラスPersonやクラスStudentのように、プライベートフィールドやパブリックな文字列の説明を処理できます。

IronBarcode - バーコード読み取りおよび作成ライブラリ

IronBarcode の機能を発見すると、バーコードの読み取りと書き込みを必要とするアプリケーションに役立ちます。 それは、C#プログラミングで使用されるゲッターとセッターのように、自動プロパティを通じたカスタマイズとバーコードデータへの直接アクセスの両方を可能にします。

Iron Suiteとゲッターとセッター

Iron Suiteパッケージは、ゲッターとセッターを含むC#開発にシームレスに統合されます。 これらのツールは、あらゆるC#プロジェクトに価値を追加します。

結論

要約すると:

  1. GetterおよびSetter:クラスのプライベートフィールドにアクセスし、変更するのに役立ちます。

  2. 自動プロパティ: 自動実装プロパティを使用して、自動的なゲッターとセッターを持つ優雅な方法です。

  3. アクセス修飾子: プロパティのアクセシビリティを微調整するのに役立ちます。

    この時点で、C#におけるゲッターとセッターの使用方法についてしっかりと理解できているはずです。

    Iron Suiteの一連のツールは、C#開発者にとって驚異的な機能を提供します。 これらの製品(IronPDF、IronXL、IronOCR、IronBarcodeを含む)はすべて、Iron Software ツールの無料トライアルが付属しており、初期投資なしでこれらの強力なライブラリをプロジェクトに探索および統合することができます。

    コミットする準備が整ったら、個別ライセンスは$749から始まります。 これらのツールのうち複数があなたのニーズに合う場合は、2つの個別ライセンスの価格で完全なIron Suiteパッケージを購入する機会を活用できます。

チペゴ
ソフトウェアエンジニア
チペゴは優れた傾聴能力を持ち、それが顧客の問題を理解し、賢明な解決策を提供する助けとなっています。彼は情報技術の学士号を取得後、2023年にIron Softwareチームに加わりました。現在、彼はIronPDFとIronOCRの2つの製品に注力していますが、顧客をサポートする新しい方法を見つけるにつれて、他の製品に関する知識も日々成長しています。Iron Softwareでの協力的な生活を楽しんでおり、さまざまな経験を持つチームメンバーが集まり、効果的で革新的な解決策を提供することに貢献しています。チペゴがデスクを離れているときは、良い本を楽しんだり、サッカーをしていることが多いです。
< 以前
C# 論理演算子(開発者のための仕組み)
次へ >
C# 文字列分割(開発者向けの使い方)