我知道它只允许类进行设置,但是有什么意义呢?

如何解决拥有只读ID的问题?

说我有一个人类:

public class Person
    {
        public string Name { get;  set; }
        public int Id { get; private set; }
        public int Age { get; set; }
    }

这是在Entities.dll中,由GUI,BL和DAL使用。

GUI称为BL:
   List<Person> p =  BL.PeopleBL.GetPeople();

为了示例,请调用DAL:
...
while(dr.read())
{
    returnPersonList.add( new Person{ Age=dr.GetInt32(1), Id=dr.GetInt32(0), Name=dr.GetString(2)})
}
...

我当然不能这样做,因为Id是私有(private)集;
正确的方法是什么?

如何让BL/Dal设置ID,但不能在GUI上设置ID?

还是这甚至不是私有(private)集的正确使用?

我只是想补充一点,这是您的典型数据库应用程序,其中pk是ID,并且不应更改(仅由BL/DAL更改)

最佳答案

尽管不是很干净,这是一种可能的解决方案:

  • 使您需要向BAL和DAL公开的属性internal
  • BAL.dll中标记DAL.dllassemblyinfo.cs内部可见

  • public class Person
    {
        public Person(int id)
        {
             this.Id=id;
        }
    
        public string Name { get;  set; }
        public int Id { get; internal set; }
        public int Age { get; set; }
    }
    
    AssemblyInfo.csEntities.dll
    [assembly: InternalsVisibleTo("DAL"), InternalsVisibleTo("BAL")]
    

    这样,DAL和BAL将可以看到所有内部信息。这可能不是理想的,但我只是建议一种可能的解决方案。

    关于c# - 属性私有(private)集;,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2366075/

    10-13 00:59