【C#基础】为什么不建议变量或方法公开(Public)?这带来了哪些不便,又该如何解决?

Why?

chatGpt回答我们的问题。

在C#游戏开发中,不建议过多使用public是因为它可能会导致以下问题:

  1. 封装性:public变量和方法可以被其他类直接访问和修改,这会降低代码的封装性,使得代码难以维护和扩展。
  2. 安全性:公共变量和方法容易受到非法访问和修改,从而破坏游戏的安全性。
  3. 维护性:如果过多使用public,当需要修改某个变量或方法时,需要修改大量的代码,这将增加代码的维护难度。

因此,使用privateprotected来限制变量和方法的访问范围,可以增强代码的封装性、安全性和维护性。

例子

public class TestingGenerics1 : MonoBehaviour
{
    
    
    public float speed;
}

//公开后就可以让任意的类在声明类后就可以调用该类的speed变量。
public class SecondTest{
    
    
	private TestingGenerics1 testingGenerics1;
	private void TestFunction(){
    
    
		//修改
		testingGenerics1.speed=10f;
	}
}

在这里插入图片描述

可是我们并不想失去可以在Unity公开调整的好处,那么可以改写成如下:

[SerializeField] private float speed;

不过这样依旧不允许其他的类对该类进行访问修改,可以看出它跟public还是有区别的,像这样的特性就很适合同一个游戏的合作开发。

[SerializeField]是什么?

我们得知道什么是serialization

C#中的序列化(serialization)是指将对象转换为字节串的操作。

Unity 中的一个好处是任何可序列化字段都可以通过 Inspector栏 进行操作

回到正题

[SerializeField] 其实是一个属性,表示该字段是可序列化的,但是添加 [SerializeField] 并不能使检查器可以访问所有内容。

public class Test : MonoBehaviour
{
    
    
    // static
    [SerializeField] static string sampleField_1;
 
    // get and set
    [SerializeField] string sampleField_2 {
    
     get; set; }
 
    // UnityEngine.Object
    [SerializeField] Sample sampleField_3;
}
 
class Sample {
    
     }

额外拓展

假设我创建了一个名为VariableA的变量,我希望它公开,但我不想在inspector显示这个变量?

[System.NonSerialized] public int VariableA;

猜你喜欢

转载自blog.csdn.net/kokool/article/details/129846988
今日推荐