我知道它只允许班级设置它,但重点是什么?
如何解决只读ID的问题?
说我有一个人班:
public class Person
{
public string Name { get; set; }
public int Id { get; private set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是一个Entities.dll
由GUI,BL和DAL使用的.
GUI调用BL:
List<Person> p = BL.PeopleBL.GetPeople();
Run Code Online (Sandbox Code Playgroud)
为了示例,调用DAL:
...
while(dr.read())
{
returnPersonList.add( new Person{ Age=dr.GetInt32(1), Id=dr.GetInt32(0), Name=dr.GetString(2)})
}
...
Run Code Online (Sandbox Code Playgroud)
当然我不能那样做因为Id是私人套装; 这样做的正确方法是什么?
如何让BL/Dal设置Id,而不是GUI?
或者这甚至没有正确使用私人套装?
我只想补充一点,这是典型的数据库应用程序,其中pk是Id,不应更改(仅限BL/DAL)
Bli*_*ieg 38
这是一种可能的解决方案,虽然不是很干净:
internal
BAL.dll
和DAL.dll
内部可见在assemblyinfo.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; }
}
Run Code Online (Sandbox Code Playgroud)
AssemblyInfo.cs
对于 Entities.dll
[assembly: InternalsVisibleTo("DAL"), InternalsVisibleTo("BAL")]
Run Code Online (Sandbox Code Playgroud)
这样,DAL和BAL都可以看到您的所有内部信息.这可能不太理想,但我只是建议一种可能的解决方案.
Gre*_*ire 12
或者你可以做到
public class Person
{
public Person(int id)
{
this.Id=id;
}
public string Name { get; set; }
public int Id { get; private set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
也许我是误解,但如果你真的想要读取ID,为什么不使用实际的只读字段呢?
public class Person
{
public Person(int id)
{
m_id = id;
}
readonly int m_id;
public int Id { get { return m_id; } }
}
Run Code Online (Sandbox Code Playgroud)
您可以通过构造函数提供用户来设置只读属性:
public class Person
{
public Person(int id)
{
this.Id = id;
}
public string Name { get; set; }
public int Id { get; private set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
113269 次 |
最近记录: |