研讨private和public

private和public的意义

从百度翻译上给出的解释:

在这里插入图片描述
在这里插入图片描述

由此我们可以得知,public是公有的意思,而private则是私有的意思。

c++中的private和public

为什么要讲c++中的private和public,是因为和c#有点相似之处,便于理解,顺便复习一下c++ (其实是为了凑数)

权限类内部该类对象子类(派生类)
private可访问不可访问不可访问
public可访问可访问可访问
protected可访问不可访问可访问

在c++中,private中的数据只能通过该类中的成员函数来进行访问,而public中的数据除了该类的成员函数之外,任何对象都可以进行访问。

c#中的private和public

在c#中:
public(公有的) 声明的方法和属性,可以被外部调用.
private(私有的) 声明的方法和属性,只能在本类中被调用,外部看不到.

举个例子

class test
    {
        public void dis1()//公共方法
        {
            Console.Write("1\r\n");
        }
        public void dis2()//公共方法
        {
            Console.Write("2\r\n");
            dis3();//内部类可以调用内部的私有方法
        }
        private void dis3()//私有方法
        {
            Console.Write("3\r\n");
        }
    }
}

在这个代码中,dis1和disc2都是public定义,而dis3是private定义,来看看效果
在这里插入图片描述
所以c#中类的private成员不可以直接进行访问,只能通过类中的成员函数进行访问,这和c++相似

为什么要区分private和public

因为被public修饰的成员可以被类的内部或者是外部直接访问,而private成员只能被类的内部访问,如果类内部的成员不希望被外界访问,那么可以将其声明为private,这样的话就可以对不希望被访问的成员进行保护。正常情况下,在某一个类中,字段(field)或者是成员变量(member variable)一般被声明为private,如果要给成员变量赋值,可以通过一个被声明为public的方法来完成,这样操作的好处是可以在给成员变量赋值前对其进行控制、处理,防止输入不符合条件的值。

在unity里面private和public的使用

在unity中public定义的变量是会在Inspector面板中直接出现的,而我们也可以通过Inspector面板直接进行修改参数值,这样就不用在c#中去修改参数,十分方便,让我们来看看效果!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TankMove : MonoBehaviour
{
    public float speed = 5; 
    private Rigidbody rd;
    public float anglespeed = 10;
    public float number = 1;
    // Start is called before the first frame update
    void Start()
    {
        rd = this.GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        float v = Input.GetAxis("Verticalplay"+number);
        rd.velocity = transform.forward * v * speed;
        float h = Input.GetAxis("Horizontalplay"+number);
        rd.angularVelocity = transform.up * anglespeed*h;
    }

在这里插入图片描述

在public定义一个speed之后,可以在inspector面板中直接修改speed的值。

如何隐藏public以及显示private

对Unity隐藏,使用 [HideInInspector]

using UnityEngine;
using System.Collections;
[HideInINspector]
public int speed = 10;

对Unity暴露,使用 [SerializeField]

using UnityEngine;
using System.Collections;
[SerializeField]
private int speed = 10;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值