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

在C#游戏开发中,过度使用public可能导致封装性、安全性和维护性降低。通过使用private或protected限制访问,可以增强这些特性。SerializeField允许在UnityInspector中编辑私有字段,而[System.NonSerialized]则能让变量公开但不显示在Inspector上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值