Struct

学习了Struct后,简单尝试一下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4
{

public struct local
{
     private int xVal;
   private int yVal;

public local(int x, int y)
{
  xVal = x;
  yVal = y;
}

public int x
{
  get
  {
  r  eturn xVal;
  }
  set
  {
    xVal = value;
  }
}
public int y{
  get
  {
  return yVal;
  }
  set
  {
  yVal = value;
  }
}
public override string ToString()
{
  return (String.Format("{0},{1}",xVal,yVal));
}
}

}

struct中的变量默认是private的,所以如果想要引用的话,可以采用C#已经封装好的方式如下:

public int y{
  get
  {
  return yVal;
  }
  set
  {
  yVal = value;
  }
}

主程序:

简单输出x,y的值:

关于结构体需要注意的是:

(1)struct中的成员变量不可以赋值:

private int x = 50;

private int y = 100;

会报错 

(2)struct是值类型

在以上程序中,Writeline()的参数是一个对象,而local是一个结构体。为什么不会报错呢

原因是,编译器讲结构体自动封箱了(就像所有值类型一样),而且创递给Writeline的是封箱后得到的对象。

struct(隐式)地从object继承,可以多态的进行反应,重定义方法

可以将上面代码片段改为

console.Writeline("local location:{0}",local.ToString());避免装箱

但是,若在myFunc()中新值被赋给x,y后输出:

   local loc1 :50,100

当返回调用方法Main()并再次调用Writeline()时,原值并没有改变:

   locallocation :200,300

结构体是作为一个值对象传递的,myFunc()中只是一个副本

把声明类改为 : public class local

并再次运行程序,输出是:

local location : 200,100

in myFunc location:50,100

local location:50,100

这次location对象也有了引用语意,因此当值在myFunc()中发生改变时,main()中对象也发生了改变

原文地址:https://www.cnblogs.com/tjuxiepeng/p/4396364.html