ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
についてC#のref
キーワードは、すべての初心者が学ぶべき重要なツールです。 呼び出し元のメソッドで参照型変数に行われた変更がその外部にも反映されるように、引数やargsを値渡しではなく参照渡しで渡すために使用されます。 このチュートリアルでは、**ref キーワードの詳細を説明し、それがどのように機能するかを示すさまざまなコンソールコードの例を紹介します。
C# でメソッドのパラメータを渡す場合、デフォルトでは値渡しになります。 これは、パラメーターの値のコピーが作成され、呼び出し元のメソッド内で行われた変更が、メソッド外の元の変数に影響を与えないことを意味します。 ref
キーワードはこの動作を変更し、パラメータを参照渡しすることを可能にします。 パラメータが参照渡しで渡される場合、メソッド内で行われた変更はメソッド外の元の変数に直接影響を与えます。
ref
キーワード: 変数が参照渡しで渡されることを示すために使用されます。ref
キーワードを使用することで、メソッドの内部で行われた変更を反映するメソッド外の変数。まず、変数が参照渡しされる概念を理解しましょう。 次のコードに示されているように、整数をインクリメントするメソッドがあると想像してください:
class Program
{
//method returns incremented value
static void IncrementByOne(int num)
{
num++;
}
static void Main()
{
int value = 5;
IncrementByOne(value);
Console.WriteLine(value); // Output: 5
}
}
class Program
{
//method returns incremented value
static void IncrementByOne(int num)
{
num++;
}
static void Main()
{
int value = 5;
IncrementByOne(value);
Console.WriteLine(value); // Output: 5
}
}
Friend Class Program
'method returns incremented value
Private Shared Sub IncrementByOne(ByVal num As Integer)
num += 1
End Sub
Shared Sub Main()
Dim value As Integer = 5
IncrementByOne(value)
Console.WriteLine(value) ' Output: 5
End Sub
End Class
上記のコードでは、IncrementByOne
メソッド内でnum
をインクリメントしたにもかかわらず、元のvalue
は変更されません。 これは、num
が元の変数のコピーであり、変更を加えても元の変数には影響しないためです。
ref
キーワードの使用では、「ref」キーワードがこの動作をどのように変更するか見てみましょう。 次のコード例の1つに示されているように、ref
を使用することで、変数を参照渡しでメソッドに渡すことができます。
class Program
{
//ref int
static void IncrementByOneRef(ref int num)
{
num++;
}
static void Main()
{
int value = 5;
IncrementByOneRef(ref value);
Console.WriteLine(value); // Output: 6
}
}
class Program
{
//ref int
static void IncrementByOneRef(ref int num)
{
num++;
}
static void Main()
{
int value = 5;
IncrementByOneRef(ref value);
Console.WriteLine(value); // Output: 6
}
}
Friend Class Program
'ref int
Private Shared Sub IncrementByOneRef(ByRef num As Integer)
num += 1
End Sub
Shared Sub Main()
Dim value As Integer = 5
IncrementByOneRef(value)
Console.WriteLine(value) ' Output: 6
End Sub
End Class
メソッドシグネチャと呼び出しの両方に ref
キーワードがあることに注意してください。 これはC#に value
変数を参照渡ししたいことを伝えます。 その結果、IncrementByOneRef
メソッド内で行われた変更は、元の value
変数に反映されます。
ref
キーワードは、整数、二重精度変数、および構造体のような型を扱う際に特に便利です。 これらの型は直接メモリに格納され、参照渡しすることでパフォーマンスの向上とデータ操作に対するより正確な制御が可能になります。
ref
キーワードは通常、値型と関連していますが、参照型変数にも使用できます。 参照型(例えばクラスや配列)は、データ自体ではなく、メモリ内の実際のデータへの参照を格納します。 これはポインターのような構造を扱っていることを意味しており、次の例に示すように、参照渡しによって異なる結果が得られる可能性があります:
class Person
{
public string Name { get; set; }
}
class Program
{
//method
static void ChangeName(ref Person person)
{
//new object
person = new Person { Name = "Alice" };
}
static void Main()
{
Person person = new Person { Name = "Bob" };
ChangeName(ref person);
Console.WriteLine(person.Name); // Output: Alice
}
}
class Person
{
public string Name { get; set; }
}
class Program
{
//method
static void ChangeName(ref Person person)
{
//new object
person = new Person { Name = "Alice" };
}
static void Main()
{
Person person = new Person { Name = "Bob" };
ChangeName(ref person);
Console.WriteLine(person.Name); // Output: Alice
}
}
Friend Class Person
Public Property Name() As String
End Class
Friend Class Program
'method
Private Shared Sub ChangeName(ByRef person As Person)
'new object
person = New Person With {.Name = "Alice"}
End Sub
Shared Sub Main()
Dim person As New Person With {.Name = "Bob"}
ChangeName(person)
Console.WriteLine(person.Name) ' Output: Alice
End Sub
End Class
この例では、ChangeName
メソッドは person
変数の参照を新しい Person
オブジェクトに変更します。 その結果、元のperson
変数は別のオブジェクトを指しており、その名前は「Alice」です。
同じ名前でも異なるパラメータを持つ複数のメソッドを作成できます。 これはメソッドのオーバーロードと呼ばれます。 ref
キーワードを使用すると、メソッドのオーバーロードがより強力になります。
class Calculator
{
public static void Add(ref int x, int y)
{
x += y;
}
public static void Add(ref double x, double y)
{
x += y;
}
}
class Program
{
static void Main()
{
int intValue = 5;
double doubleValue = 7.5;
//ref parameter
Calculator.Add(ref intValue, 3);
Calculator.Add(ref doubleValue, 2.5);
Console.WriteLine(intValue); // Output: 8
Console.WriteLine(doubleValue); // Output: 10.0
}
}
class Calculator
{
public static void Add(ref int x, int y)
{
x += y;
}
public static void Add(ref double x, double y)
{
x += y;
}
}
class Program
{
static void Main()
{
int intValue = 5;
double doubleValue = 7.5;
//ref parameter
Calculator.Add(ref intValue, 3);
Calculator.Add(ref doubleValue, 2.5);
Console.WriteLine(intValue); // Output: 8
Console.WriteLine(doubleValue); // Output: 10.0
}
}
Friend Class Calculator
Public Shared Sub Add(ByRef x As Integer, ByVal y As Integer)
x += y
End Sub
Public Shared Sub Add(ByRef x As Double, ByVal y As Double)
x += y
End Sub
End Class
Friend Class Program
Shared Sub Main()
Dim intValue As Integer = 5
Dim doubleValue As Double = 7.5
'ref parameter
Calculator.Add(intValue, 3)
Calculator.Add(doubleValue, 2.5)
Console.WriteLine(intValue) ' Output: 8
Console.WriteLine(doubleValue) ' Output: 10.0
End Sub
End Class
上記の例では、Add
メソッドをオーバーロードして、int
型と double
型の両方で動作するようにしています。ref
キーワードは、メソッドが元の変数を直接修正できるようにします。
もう一つの関連キーワードは「out」です。 それは ref
と似ていますが、少し異なる目的を持っています。 ref
は変数が渡される前に初期化されることを期待しますが、out
キーワードは、初期値を持たないパラメーターに対してメソッドが値を割り当てる場合に使用されます。
class Program
{
static void Divide(int dividend, int divisor, out int quotient)
{
quotient = dividend / divisor;
}
static void Main()
{
int result;
Divide(10, 2, out result);
Console.WriteLine(result); // Output: 5
}
}
class Program
{
static void Divide(int dividend, int divisor, out int quotient)
{
quotient = dividend / divisor;
}
static void Main()
{
int result;
Divide(10, 2, out result);
Console.WriteLine(result); // Output: 5
}
}
Friend Class Program
Private Shared Sub Divide(ByVal dividend As Integer, ByVal divisor As Integer, ByRef quotient As Integer)
quotient = dividend \ divisor
End Sub
Shared Sub Main()
Dim result As Integer = Nothing
Divide(10, 2, result)
Console.WriteLine(result) ' Output: 5
End Sub
End Class
この例では、Divide
メソッドは商を計算し、out
キーワードを使用してそれを quotient
変数に割り当てます。 result
をメソッドに渡す前に初期化する必要はないことを留意してください。
out
キーワードは ref
キーワードに似ていますが、実質的に異なります。 out
パラメータには初期値が必要ありませんが、ref
パラメータにはメソッド呼び出し前に初期値が必要です。
「ref」および「out」キーワードは強力なツールですが、慎重に使用する必要があります。 これらのキーワードの誤った使用は、混乱するコードや予期しない動作につながる可能性があります。 例えば、ref
や out
パラメータで非 ref 変数を初期化せずに使用することはできません。これはコンパイルエラーにつながるためです。
ref
キーワードの高度な使用方法「ref」キーワードを使用する際に、参照型と値型の違いを理解することは非常に重要です。
値型: 変数が直接データを含んでいる型。例えば、整数や浮動小数点数など。
値型に ref
を使用すると、変更がメソッド外に反映されますが、参照型変数は本質的にこのように動作します。
ref
キーワードを使用した拡張メソッド拡張メソッドで ref
キーワードを使うこともできます。 例:
public static class StringExtensions
{
//example
public static void AppendValue(ref this string input, string value)
{
input += value;
}
}
public static class StringExtensions
{
//example
public static void AppendValue(ref this string input, string value)
{
input += value;
}
}
Public Module StringExtensions
'example
Public Sub AppendValue(ByRef Me input As String, ByVal value As String)
input &= value
End Sub
End Module
メソッド署名またはメソッド呼び出しに ref
キーワードを含めるのを忘れると、コンパイル時にコンパイラエラーが発生します。
Async
メソッドとrefパラメーターイテレータメソッドやasync
メソッドではref
パラメータを使用できません。これらはパラメータを値渡しで渡す必要があります。
C#のref
キーワードのような重要な概念を理解することに加えて、開発者の生活を大幅に楽にする強力なツールのセットがあります。 Iron Suiteは、IronPDF、IronXL、IronOCR、IronBarcodeを含む強力なツールとライブラリのコレクションです。 これらのツールを探索し、どのようにしてあなたのコーディング体験を引き上げることができるかを見てみましょう。
IronPDFについて学ぶをIron Suiteの重要な一部として使用します。これは、開発者がC#内でPDFファイルを作成、読み取り、編集できるようにするライブラリです。 HTMLをPDFに変換したい場合、IronPDFには必要なツールがあります。 こちらをご覧くださいHTMLをPDFに変換するチュートリアルこの機能の詳細について学ぶには。
C#でExcelファイルを扱うのは挑戦的ですが、IronXLの特徴このタスクを簡素化します。 それは、Excelをインストールせずに、Excelファイルの読み取り、書き込み、編集、および操作を可能にします。 データのインポートから新しいスプレッドシートの作成まで、IronXLはC#でExcelを扱えるようにします。
光学文字認識 (OCR)(OCR (光学式文字認識))複雑な場合がありますがIronOCRを発見するプロセスを合理化するために このライブラリを使用すると、画像からテキストを読み取り、それを機械で読み取れるテキストに変換することができます。 スキャンしたドキュメントからテキストを抽出する必要がある場合や、画像から文字を認識する必要がある場合、IronOCRにはその機能があります。
BarCodeは様々な業界で一般的に使用されており、アプリケーションでBarCodeを使用することがより身近になりました。IronBarcodeライブラリ. このライブラリは、C#でバーコードを作成、読み取り、操作することができます。 IronBarcodeは、幅広いQRコードおよびバーコード形式をサポートしています。
これらのツールが前述のref
キーワードとどのように関連しているのか疑問に思うかもしれません。 複雑なプロジェクトにおいて、PDF、Excel、OCR、またはバーコードを扱う場合、ref
キーワードやその他のC#の原則を効果的に使用することが、コードを効率的に管理するために重要となります。
たとえば、IronXLを使用して大規模なExcelファイルを操作する際に、ref
キーワードを使用してオブジェクトを参照渡しすることで、コードをより効率的かつ保守的にすることができます。 同様に、ref
キーワードを使用する方法では、IronPDFを使用してPDFドキュメントを操作することが含まれる場合があります。
ref
キーワードのようなコア言語機能を理解し、Iron Suite のようなツールにアクセスすることにより、効率的で堅牢かつ汎用的なアプリケーションを構築するための強力な組み合わせが備わります。 Iron Suiteは、既存のC#の知識とシームレスに連携するように設計されており、よりプロフェッショナルで洗練されたソリューションを作成するのに役立ちます。
C#言語は、ref
キーワードのような機能を備え、開発者に強力な機能を提供します。 IronPDF、IronXL、IronOCR、IronBarcodeを含むIron Suiteと組み合わせることで、可能性はさらに広がります。
Iron Suiteの各製品は、Iron Suiteの無料トライアルすぐに投資することなく、広範な機能を探索して活用することができます。 フルライセンスを進める決定をされる場合、個々のコンポーネントに対する料金は $749 からとなります。
Iron Suite全体があなたのニーズに合っている場合、素晴らしいお得な情報があります。 2つの個別コンポーネントの価格でフルスイートを手に入れることができます。
9つの .NET API製品 オフィス文書用