• 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()中对象也发生了改变

  • 相关阅读:
    SQL的join使用图解
    归并排序的JAVA实现
    java 快速排序 时间复杂度 空间复杂度 稳定性
    哈希表(HashMap)分析及实现(JAVA)
    外部排序
    海量数据面试题整理
    《CSS3秘籍》第6、7章
    《CSS3秘籍》第3-5章
    《CSS3秘籍》第1、2章
    《HTML5与CSS3基础教程》第11、14-16、18章
  • 原文地址:https://www.cnblogs.com/tjuxiepeng/p/4396364.html
Copyright © 2020-2023  润新知