ホームページ >バックエンド開発 >C#.Net チュートリアル >SUNWEN チュートリアル - C# 上級 (7)
私が話したいのは C# の構造 (struct) です。ここで話している構造は C# の言語構造を指すものではないことに注意してください。以下では、比較のために、この構造体について説明します。
次の例では、属性、メソッド、フィールドを使用する方法について説明します。
000: / / Structsstruct1.cs
001: System を使用します;
002: struct SimpleStruct
003: {
004: PRivate int xval;
005: public int : if (value < 100)
012: xval = value;
013: }
014: }
015: public void DisplayX()
016: {
017: Console.WriteLine("格納されている値は: {0 }", xval);
018: }
019: }
020:
021 : class TestClass
022: {
023: public static void Main()
024: {
025: SimpleStruct ss = new SimpleStruct();
026: ss なるほど。クラスを使用してこのプログラムを書き換えても、結果は同じになります。ただし、構造体 (struct) は値型であるのに対し、クラスは参照型であることがわかります。組み込み型のようなオブジェクトを作成します
また、 new キーワードを使用してクラスのインスタンスを作成すると、それはヒープに割り当てられ、 new を使用して構造体のインスタンスを作成すると、ヒープに割り当てられます。これにより、パフォーマンスが大幅に向上します (M$ が言ったこと)。次の例をもう一度見てみましょう:
000: // Structsstruct2.cs
001: using System;
002:
003: class TheClass
004: {
006: }
007:008: struct TheStruct
009: {
011: }
012:013: クラス TestClass
014: {
015: public static void structtaker(TheStruct s)
016: {
017: s.x = 5;
018: }
019: public static void classtaker(TheClass c)
020: {
021: c.x = 5;
022: }
023: public static void Main()
024: {
025: TheStruct a = new TheStruct();
026: TheClass b = new TheClass();
027: a.x = 1;
028: b.x = 1;
029: structtaker(a);
030: classtaker(b );
031: Console.WriteLine("a.x = {0}", a.x);
032: Console.WriteLine("b.x = {0}" , b.x);
033: }
034: }
この例では、 a.x= は変更されずに 1 を出力しますが、 b.x は変更されています。クラスはそうします。構造体のインスタンス化に new を使用しない場合、すべてのフィールドは初期化されるまで未割り当てのままになります。さらに重要なのは、構造体は他のクラスから継承できないことです。他のクラスの基本クラスでもありません。
例 3:
インターフェース IImage
{
void Paint();
}
struct Picture : IImage
{
public void Paint()
{
}
private int x, y, z; // その他の構造体メンバー}