gpt4 book ai didi

c# - 这些代码在 c# 中的内存中是否安全?

转载 作者:行者123 更新时间:2023-11-30 14:48:15 25 4
gpt4 key购买 nike

我对以下代码有疑问。

首先,这些代码运行良好。

但是在Student类中并没有只定义“courses”的声明。如果在Student的构造函数中参数是常量,这些代码会安全吗?感谢您的帮助!:)

public class Student
{
public string name;
public int age;
public string[] courses;
public Student(string _name, int _age,params string[] _courses)
{
name = _name;
age = _age;

courses = _courses;//is this OK if _courses is constant?


}
}
public class work : MonoBehaviour
{
void Start()
{
/*
string[] courses={"math", "English"};
Student Tom = new Student("Tom",18,courses);
//It's wrong!
*/
Student Tom = new Student("Tom", 18, "math", "English");
string Tom_text = JsonUtility.ToJson(Tom);
Debug.Log(Tom_text);
}
}

最佳答案

按照您的方式,任何人都可以随时更改 Student 对象。

如果您不希望任何人在 Student 对象创建后对其进行任何更改,则将其设为不可变,如下所示:

public class Student
{
public string Name { get; private set; }
public int Age { get; private set; }
public IEnumerable<string> Courses { get; private set; }
public Student(string name, int age, params string[] courses)
{
this.Name = name;
this.Age = age;

this.Courses = courses;
}
}

现在人们无法更改属性,因为 setter 是私有(private)的。

并且为了遵循 .NET 命名约定,不要在参数名称中使用 - 下划线,而对属性名称使用 Pascal Notation。我已删除下划线并使用 Pascal 表示法 作为属性名称。

编辑

@diemaus 在 C# 6 中对此答案的评论中提到了一个很好的观点:

You can actually remove the private set entirely, and just leave it { get; }. This is allowed as long as long as you only set the properties in the constructor.

关于c# - 这些代码在 c# 中的内存中是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42329552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com