C#構造体特性
15803 ワード
構造体の定義:構造体はクラスのように単独で定義もよい.
構造体は、名前の前に制御アクセス子を加えることもできる.
構造体studentにpubliceまたはinternalの宣言クラスprogramがない場合、student構造を使用してobjオブジェクトを定義できません.構造体studentの要素にpublicの宣言がない場合、オブジェクトobjは要素xを呼び出すことができません.デフォルトの構造体名と要素名は*******クラス型プログラムです.
構造体では、クラスと同様に静的メンバーを定義することもでき、使用時にクラス名、または構造名でインスタンスに属さない呼び出しを行う必要があり、宣言時に直接定義する.プログラム:
または
コンストラクション関数を定義してメンバーを初期化できますが、デフォルトの非パラメトリックコンストラクション関数とデフォルトの非パラメトリックコンストラクション関数プログラムを書き換えることはできません.
構造体でメンバー関数を定義できます.プログラム:
構造体のオブジェクトはnew演算子を使用して作成(obj)するか、単一の要素割り当て(obj 2)を直接作成することもできます.これはクラスとは異なります.クラスはnewを使用してオブジェクトプログラムを作成するしかないからです.
クラスオブジェクトと関数を使用する場合、参照伝達が使用されるため、フィールド変更は構造オブジェクトと関数を使用する場合、値伝達が使用されるため、フィールド変更プログラムはありません.
結果:class_wsy obj_1.x=90 struct_wsy obj_2.x=100
class
a{};
struct
a{};
構造体は、名前の前に制御アクセス子を加えることもできる.
public
struct
student{};
internal
struct
student{};
構造体studentにpubliceまたはinternalの宣言クラスprogramがない場合、student構造を使用してobjオブジェクトを定義できません.構造体studentの要素にpublicの宣言がない場合、オブジェクトobjは要素xを呼び出すことができません.デフォルトの構造体名と要素名は*******クラス型プログラムです.
using
System;
public
struct
student
{
public
int
x;
};
class
program
{
public
static
void
Main()
{
student obj
=
new
student();
obj.x
=
100
;
}
};
構造体では、クラスと同様に静的メンバーを定義することもでき、使用時にクラス名、または構造名でインスタンスに属さない呼び出しを行う必要があり、宣言時に直接定義する.プログラム:
using
System;
public
struct
student
{
public
static
int
a
=
10
;
};
class
exe
{
public
static
void
Main()
{
Console.WriteLine( student.a
=
100
);
}
};
または
コンストラクション関数を定義してメンバーを初期化できますが、デフォルトの非パラメトリックコンストラクション関数とデフォルトの非パラメトリックコンストラクション関数プログラムを書き換えることはできません.
public
struct
student
{
public
int
x;
public
int
y;
public
static
int
z;
public
student(
int
a,
int
b,
int
c)
{
x
=
a;
y
=
b;
student.z
=
c;
}
};
構造体でメンバー関数を定義できます.プログラム:
構造体のオブジェクトはnew演算子を使用して作成(obj)するか、単一の要素割り当て(obj 2)を直接作成することもできます.これはクラスとは異なります.クラスはnewを使用してオブジェクトプログラムを作成するしかないからです.
public
struct
student
{
public
int
x;
public
int
y;
public
static
int
z;
public
student(
int
a,
int
b,
int
c)
{
x
=
a;
y
=
b;
student.z
=
c;
}
};
class
program
{
public
static
void
Main()
{
student obj
=
new
student(
100
,
200
,
300
);
student obj2;
obj2.x
=
100
;
obj2.y
=
200
;
student.z
=
300
;
}
}
クラスオブジェクトと関数を使用する場合、参照伝達が使用されるため、フィールド変更は構造オブジェクトと関数を使用する場合、値伝達が使用されるため、フィールド変更プログラムはありません.
結果:class_wsy obj_1.x=90 struct_wsy obj_2.x=100
using
System;
class
class_wsy
{
public
int
x;
}
struct
struct_wsy
{
public
int
x;
}
class
program
{
public
static
void
class_t(class_wsy obj)
{
obj.x
=
90
;
}
public
static
void
struct_t(struct_wsy obj)
{
obj.x
=
90
;
}
public
static
void
Main()
{
class_wsy obj_1
=
new
class_wsy();
struct_wsy obj_2
=
new
struct_wsy();
obj_1.x
=
100
;
obj_2.x
=
100
;
class_t(obj_1);
struct_t(obj_2);
Console.WriteLine(
"
class_wsy obj_1.x={0}
"
,obj_1.x);
Console.WriteLine(
"
struct_wsy obj_2.x={0}
"
,obj_2.x);
Console.Read();
}
}
public
struct
student
{
public
void
list()
{
Console.WriteLine(
"
"
);
}
};
using
System;
class
base
{
public
struct
student
{
public
static
int
a
=
10
;
};
}
class
exe
{
public
static
void
Main()
{
Console.WriteLine(
base
.student.a
=
100
);
}
};