C# 内部可编辑,但外部仍可见?

C# 内部可编辑,但外部仍可见?,c#,keyword,readonly,internal,C#,Keyword,Readonly,Internal,在我的C#DLL中,我希望属性对外部应用程序可读,但不可编辑。有点像外部应用程序的只读和内部-只读,以及DLL的内部的组合 但是只读的问题是,你不能随心所欲地编辑它们 而internal的问题是,它将属性完全隐藏在外部程序中 有可能解决这一困境吗?老实说,我对任何事情都持开放态度。你能用只读版本包装你的内部变量吗?然后外部客户端只能看到只读版本 (我假设这些变量是属性?如果使用属性,请尝试执行以下操作: public string Example {get; protected set; }

在我的C#DLL中,我希望属性对外部应用程序可读,但不可编辑。有点像外部应用程序的
只读
内部
-
只读
,以及DLL的
内部
的组合

但是
只读
的问题是,你不能随心所欲地编辑它们

internal
的问题是,它将属性完全隐藏在外部程序中


有可能解决这一困境吗?老实说,我对任何事情都持开放态度。

你能用
只读版本包装你的
内部变量吗?然后外部客户端只能看到
只读版本


(我假设这些变量是属性?

如果使用属性,请尝试执行以下操作:

public string Example {get; protected set; }


第一个允许通过子类设置属性,而第二个不允许。这将允许您在类内设置属性,但dll的用户将能够以只读方式访问该属性。您还可以添加内部方法,以便其他类可以在DLL中修改该状态,但引用该状态的任何人都无法修改。

如果您使用的是属性,则可以对
get
set
方法使用不同的访问修饰符:

public T MyProperty { get; internal set; }
根据您的使用情况,您还可以使用其他访问修饰符进行
设置
,例如
私有
受保护

如果您有不同的设置(如内部字段),还可以为该字段公开一个公共getter:

public T MyProperty { get { return myInternalField; } }

我选择了{get;internal set;}-感谢您向我介绍这个
accessibility
标签是关于帮助残疾人的。(标记已移除)我决定使用{get;internal set;}-感谢您向我介绍这个
public T MyProperty { get { return myInternalField; } }