.NET ヘルプ

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

更新済み 8月 29, 2023
共有:

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

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

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

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

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

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

ゲッターは、ユーザーが 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
VB   C#

上記のclass Personには、getter と setter の両方があります (GetName) およびsetter (SetName) name プロパティのために。 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
VB   C#

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
VB   C#

この例では、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
VB   C#

class ProgramDescription プロパティには 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
VB   C#

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

C#開発を強化するIron Suiteのご紹介

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

IronPDF - 強力なPDF管理ツール

IronPDF(アイアンPDF) 開発者がC#でPDF文書を作成、読み取り、および編集することができるライブラリです。 HTML から PDF への変換に関しては HTML から PDF へのチュートリアル また、ゲッターとセッターを使用してPDFメタデータを管理する場合でも、IronPDFがあなたをサポートします。

IronXL - Excel操作が簡単に

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

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

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

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

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

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

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

結論

要約すると:

  1. GetterSetter:クラスのプライベートフィールドにアクセスし、修正するために役立ちます。

  2. オートプロパティ: 自動実装プロパティを使って、自動的なゲッターとセッターを持つための洗練された方法。

  3. アクセス修飾子: それらはプロパティのアクセス制御を微調整するのに役立ちます。

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

    Iron Suiteの一連のツールは、C#開発者にとって驚異的な機能を提供します。 以下の各製品(IronPDF、IronXL、IronOCR、IronBarcode)は、それぞれに 無料体験これにより、これらの強力なライブラリを初期投資なしでプロジェクトに組み込んで活用することができます。

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

< 以前
C# 論理演算子(開発者のための仕組み)
次へ >
C# 文字列分割(開発者向けの使い方)

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 10,659,073 View Licenses >