gpt4 book ai didi

c# - 通过其容器的 get 访问器通过 set 访问器为属性赋值是一件坏事吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:49 24 4
gpt4 key购买 nike

考虑以下代码:

class Program
{
static void Main(string[] args)
{
Department deathStar = new Department { Name = "Death Star" };

Console.WriteLine("The manager of {0} is {1}.", deathStar.Name, deathStar.Manager.FullName);

deathStar.Manager.FirstName = "Lord";

Console.WriteLine("The manager of {0} is {1}.", deathStar.Name, deathStar.Manager.FullName);

Console.ReadLine();
}
}

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }

public string FullName
{
get
{
return this.FirstName + " " + this.LastName;
}
}
}

public class Department
{
public string Name { get; set; }

public Person Manager { get; private set; }

public Department()
{
this.Manager = new Person { FirstName = "Darth", LastName = "Vader" };
}
}

产生以下输出:

The manager of Death Star is Darth Vader.
The manager of Death Star is Lord Vader.

即使我无法将 Manager 更改为 Person(私有(private)集访问器)的不同实例或新实例,我也可以更改它的属性(具有公共(public)集访问器)。

那么,通过容器的 get 访问器通过 set 访问器为属性赋值是一件坏事吗?换句话说,这是代码味道吗?

编辑:

这只是一个例子来说明一个问题。人员和部门仅为此示例创建。

最佳答案

不一定。

例如,查看 SqlCommand 对象上的参数集合。您可以更改集合中的项目,但不能将新的参数集合分配给命令对象。

以您的示例为例,如果您有一个维护 Person 对象的 UI,并且您需要更改一个人的名字,那么更改该人的名字、保留姓氏和 PersonId 字段是完全有效的,然后更新数据库表使用 PersonId 字段。

我觉得一切都还好

关于c# - 通过其容器的 get 访问器通过 set 访问器为属性赋值是一件坏事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/853638/

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