C# for Unity编程语言快速入门教程(连载13)_C#结构体
C#的“结构体”使用Struct 关键字来定义,是与“类”、"接口"并列的编程单位。其设计的主要目的是自定义“值类型”,即允许用户自定义值类型。
适用范围:
结构适合一些小型的数据结构,这些结构包含的数据以创建后不修改的数据为主。也适合数据打包,一次性定义多个变量。
结构体的限制很多。
1> 除非字段声明为const 、static,否则无法初始化。
2> 结构体没有默认的构造函数。
3> 结构体可以声明带参数的构造函数。
4> 结构不能继承。
5> 结构体在赋值时候进行复制。
6> 结构体实例化可以不使用New 运算符。
7> 结构可以实现接口。
8> 结构体使用时,可以New ,也可以不New. 如果不New ,则使用前必须为结构体中所有的成员变量赋值。
对于C#初学者来说,对于结构体是不好区分的,现就结构体与类的主要区别总结如下:
1> 如果你需要用面向对象的特性,必须用类。
2> 成员变量很多的时候,必须用类。
3> 类与结构体的最大区别是:“类" 是引用类型,所以类的实例对象是按照“引用传值”,而"结构"类型是值类型,所以结构实例对象是按“值类型传值”。
为了更好的说明类与结构的异同点,现提供如下代码,供大家学习讨论:
class Program
{
public void ChangeValues_1(int intNum)
{
intNum = 100;
}
/// <summary>
/// 测试类对象传值(引用)
/// </summary>
/// <param name="pc"></param>
public void ChangeValues_2(PointClass pc)
{
pc.PointX = 1000;
pc.PointY = 1100;
}
/// <summary>
/// 测试结构体传值(拷贝)
/// </summary>
/// <param name="ps"></param>
public void ChangeValues_3(PointStruct ps)
{
ps.PointX = 2000;
ps.PointY = 2200;
}
static void Main(string[] args)
{
/* 引出学习案例(系统的“点”) */
//Point firstPoint = new Point();
//firstPoint.X = 10;
//firstPoint.Y = 20;
/*类与结构体 不同点测试 */
//引用类型
PointClass pc = new PointClass(10,20);
//值类型
PointStruct ps = new PointStruct(50,60); //写法1
//写法2:特别注意,在使用结构中的方法或者属性前,
//必须显式的给结构的字段赋值,否则必须用New.
PointStruct ps2;
ps2._PointX = 23;
ps2._PointY = 88;
Program obj = new Program();
int intTestNum = 50;
obj.ChangeValues_1(intTestNum);
Console.WriteLine("Number=" + intTestNum);
//结果表明:引用类型,在方法中发生的变化,对结果造成的影响
obj.ChangeValues_2(pc);
Console.WriteLine("pc.pointX={0},pointY={1}",pc.PointX,pc.PointY);
obj.ChangeValues_3(ps);
Console.WriteLine("ps.pointX={0},pointY={1}", ps.PointX, ps.PointY);
}
}
//定义的类
class PointClass
{
private int _PointX;
private int _PointY;
public int PointX
{
get { return _PointX; }
set { _PointX = value; }
}
public int PointY
{
get { return _PointY; }
set { _PointY = value; }
}
public PointClass(int px, int py)
{
_PointX = px;
_PointY = py;
}
}
//定义的结构体
struct PointStruct
{
public int _PointY;
public int _PointX;
public int PointX
{
get { return _PointX; }
set { _PointX = value; }
}
public int PointY
{
get { return _PointY; }
set { _PointY = value; }
}
public PointStruct(int px, int py)
{
_PointX = px;
_PointY = py;
}
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。