Ada*_*m V 0 c# partial-classes
我有一个我定义的公共类,它最终将成为API的一部分,因此它必须具有某些公共属性.但是,我还希望某些属性是只读的,除非它们是在我自己的项目中创建的(例如,如果用户有我们的API,他们可以创建一个User对象,但是他们无法写入其ID字段,仅当我们从数据库中提取时才会填写).
我的想法是使用相同的命名空间,即"公共"DLL和"私有"DLL,有两个独立的程序集.公共DLL中的原型将如下所示:
namespace CompanyName
{
public partial class User
{
public Id { get; }
public Name { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
并且私有DLL将具有:
namespace CompanyName
{
public partial class User
{
public Id { set; }
}
}
Run Code Online (Sandbox Code Playgroud)
这会有用吗?如果没有,有什么更好的方法呢?
部分类不能跨越程序集,因此这不起作用.
您可以将您的类定义为:
namespace CompanyName
{
public class User
{
public Id {get;internal set;}
public Name {get;set;}
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着只有具有内部访问权限的代码才能设置Id
属性值.如果需要从程序集外部进行设置,请确保程序集具有强名称,然后可以使用InternalsVisibleTo属性将程序集的内部访问权限授予另一个程序集(设置值的程序集Id
).
我最近不得不为我正在使用的API做一些非常类似的事情.我们的API主要是使用接口来定义的,所以我能够通过公共部分的Public API项目和构成我们内部代码使用的API的内部API项目来实现这一点,内部接口来自公共部分. .API接口的实现实现了两个接口,这意味着我们的内部代码可以访问非公共API的部分.
不,这不行.部分类在编译时合并:您不能将成员添加到已编译的类.
根据您的代码的确切排列方式,更好的方法是提供内部setter:
public int Id { get; internal set; }
Run Code Online (Sandbox Code Playgroud)
如果您需要能够从另一个程序集执行该集合,但只能控制一个程序集,则可以使用InternalsVisibleToAttribute将该程序集访问权限授予内部setter.
归档时间: |
|
查看次数: |
2227 次 |
最近记录: |