ホームページ  >  記事  >  バックエンド開発  >  SUNWEN チュートリアル - C# 上級 (7)

SUNWEN チュートリアル - C# 上級 (7)

黄舟
黄舟オリジナル
2016-12-19 10:23:041128ブラウズ

私が話したいのは 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: {

005: public int x;

006: }

007:

008: struct TheStruct
009: {

010: public int x;

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; // その他の構造体メンバー

}

上記は SUNWEN チュートリアル - C# 上級 (7) の内容です。 PHP 中国語 Web サイト (www.php.cn)!

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