初识c#---属性和参数传递



  1.属性
    作用:1.校验数据的合法性
            2.保护内部字段不被破坏(封装性)
            3.属性是为了拦截字段
            4.属性是为了拦截字段在赋值的时候,做一些操作来保护字段的合法性

           实际上属性就是特殊的方法,因为属性内部提供了两个构造器
           一个是set构造器,一个是get构造器
           我们可以认为:
            set构造器实际上就是一个方法而已,有参无返回值方法
            value就是参数
            get构造器也是方法,无参有返回值
 属性的语法:
  修饰符 + 数据类型(如果你有对应的字段,此时数据类型要和字段的类型保持一致) + 字段名(首字母大写)
    {
          //属性内部有两个构造器
          set{}
          //set:出现赋值运算的时候会调用set构造器
          //get{}
          //get:取值的时候会调用get构造器
         
          //注意,属性的内部至少存在一个构造器
          //如果只有set,没有get,该属性为只写
          //如果只有get,没有set,该属性为只读
         
          //区分调用set还是get
         //是否产生赋值运算(就是看有没有等于号)是判断调用set还是get的依据
        
          //属性实际上是特殊的方法
          //set构造器,是有参数没有返回值的特殊方法,参数为系统关键字value
          //get构造器,是无参数有返回值的特殊方法,返回的是字段
         
          //需要注意的是属性不一定和字段是成对儿出现的,两者可以同时存在,
          //当然也可以不同时存在
    }
 
 
  2.参数传递(实参-->形参)
    第一种情况:值传递
    值类型作为实参传递给形参的时候,传递的是值得本身,而不是值的地址.
    代表:int float double bool struct enum等常见值类型
   
    第二种情况:引用传递(地址传递)
    引用类型作为实参传递给形参的时候,传递的是地址.
    当然这里面string是一个特殊范例,string虽然本身为引用类型,但是
    作为实参传递的时候,默认是值传递
    代表:数组 对象
   
    ref指针:
    作用:将值传递改为地址传递
    用途:如果你想改变一个值类型本身的值,那么在传递的时候需要加上ref
         如果你在参数传递的时候,仅仅是为了运算不需要改变原值,那么不需要加上ref
        
    out关键字:
    作用:将某个值保存到一个变量中
    用途:保存结果,实际上相当于函数有返回值.
   
   
   3.内存分布
   栈:栈区存储变量,比如int a = 10;
       a变量存于栈,10存在常量区.
       a实际上保存的是常量区10这个值所在的首地址
   堆:一般用来存放对象信息(字段,属性,方法,索引器)
  
   4.new关键字
   new 一个类实例的时候,系统会在堆区开辟新的内存空间.
   new 一个结构体实例的时候,系统不会在堆区开辟新的内存空间.
  
   结构体适合小型数据结构,就是不需要耗费内存的那种,常用来做工具使用
  比如说向量(x,y,z)
  类适合大型数据结构,比如玩家类,需要常驻内存.
  结构体不能被继承,但是类可以.


 



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值