C#接口的setter或getter的访问性限制

有时候只想对外提供getter,但是属性的赋值又必须是setter,此时,可以限制setter的访问性。例如,假设有一个自定义字典(MyDict)属性,该属性我只希望外部能够访问,但是设置必须在内部,则可提供如下声明

C# 复制代码
namespace LibA{
    public interface ITranslation
	{
    	MyDict Dict
    	{
        	get;
        	internal set;
    	}
	}
}

如果在LibB中访问,则

C# 复制代码
public class MyTranslation:ITranslation{
    private MyDict _dict = null;
    public MyDict Dict{
        get{
        	return _dict;
        }
        set{
            _dict = value;
        }
    }
}

public class Main{
    public void do(){
        MyTranslation translation = new MyTranslation();
        var count = translation.Dict.Count;//可访问
        translation.Dict = new MyDict();//非法
    }
}

用途。如果我用反射方式在LibA下动态创建Lib的MyTranslation对象,则可使用setter

C# 复制代码
Assembly assembly = Assembly.LoadFrom(Environment.CurrentDirectory + "\\" + filename);
ITranslation? translation = assembly.CreateInstance(translation_name, true, BindingFlags.Default, null, null, null, activationAttributes: null) as ITranslation;

if (translation != null)
{
    translation.Dict = new MyDict();
}
相关推荐
千亦学不会编程2 小时前
C# 枚举 详解
c#
万物此臻4 小时前
C#编写软件添加菜单栏
开发语言·c#
亿牛云爬虫专家6 小时前
Playwright 多语言一体化——Python_Java_.NET 全栈采集实战
java·python·c#·汽车·.net·playwright·dongchedi.com
thunder-18 小时前
C# 匹配模式
开发语言·c#
Kookoos8 小时前
使用 ABP vNext 集成 MinIO 构建高可用 BLOB 存储服务
后端·c#·.net·.netcore·minio·blob
我不是程序猿儿8 小时前
【C#】用 DevExpress 创建带“下拉子表”的参数表格视图
linux·windows·c#
CoderIsArt9 小时前
C#中的ThreadStart委托
c#
小浪学编程11 小时前
C#学习9——接口、抽象类
前端·学习·c#
o0向阳而生0o12 小时前
47、C#可否对内存进⾏直接的操作?
开发语言·c#·.net