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;