Vil*_*lx- 9 .net c# class access-modifiers c#-3.0
我想要进行以下设置:
class Descriptor
{
public string Name { get; private set; }
public IList<Parameter> Parameters { get; private set; } // Set to ReadOnlyCollection
private Descrtiptor() { }
public Descriptor GetByName(string Name) { // Magic here, caching, loading, parsing, etc. }
}
class Parameter
{
public string Name { get; private set; }
public string Valuie { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
从XML文件加载后,整个结构将是只读的.我想这样做,只有Descriptor类可以实例化一个参数.
一种方法是创建一个IParameter
接口,然后Parameter
在Descriptor类中使类成为私有,但在实际使用中,Parameter将有几个属性,我想避免重新定义它们两次.
这有点可能吗?
LBu*_*kin 19
使其成为实现特定接口的私有嵌套类.然后,只有外部类可以实例化它,但任何人都可以使用它(通过接口).例:
interface IParameter
{
string Name { get; }
string Value { get; }
}
class Descriptor
{
public string Name { get; private set; }
public IList<IParameter> Parameters { get; private set; }
private Descriptor() { }
public Descriptor GetByName(string Name) { ... }
class Parameter : IParameter
{
public string Name { get; private set; }
public string Value { get; private set; }
}
}
Run Code Online (Sandbox Code Playgroud)
如果您真的必须避免使用该接口,则可以创建一个包含所有属性但声明受保护构造函数的公共抽象类.然后,您可以创建一个从公共抽象继承的私有嵌套类,该类只能由外部类创建,并将其实例作为基类返回.例:
public abstract AbstractParameter
{
public string Name { get; protected set; }
public string Value { get; protected set; }
}
class Descriptor
{
public string Name { get; private set; }
public IList<AbstractParameter> Parameters { get; private set; }
private Descriptor() { }
public Descriptor GetByName(string Name) { ... }
private class NestedParameter : AbstractParameter
{
public NestedParameter() { /* whatever goes here */ }
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3694 次 |
最近记录: |