C# 跨项目扩展类的属性和方法
所以我们想要的是一个跨多个模块扩展的库,每个模块都添加了各自的功能。例如我们的基类C# 跨项目扩展类的属性和方法,c#,C#,所以我们想要的是一个跨多个模块扩展的库,每个模块都添加了各自的功能。例如我们的基类 public class Account { public string Username; } 然后在一个单独的包中(比如ActiveDirectory包) 这将把我们的帐户类扩展到 public class Account { public string Username; public UserPrincipal Principal; } 但是,只有在同一项目中才支持使用partial关键字
public class Account {
public string Username;
}
然后在一个单独的包中(比如ActiveDirectory
包)
这将把我们的帐户类扩展到
public class Account {
public string Username;
public UserPrincipal Principal;
}
但是,只有在同一项目中才支持使用partial
关键字。我也不想仅仅将Account
扩展到ADAccount
,因为其他模块需要添加自己的属性和方法,并且没有结构化的类层次结构。扩展方法是可能的,但它们只是方法,不能向类存储任何附加数据
实际用例
我希望用户能够
Install-Package BaseLibrary
并获取公共类帐户{public string Username}
或运行
Install-Package BaseLibrary
Install-Package BaseLibrary-ActiveDirectory
Install-Package BaseLibrary-Twitter
得到
public class Account {
public string Username;
public UserPrincipal Principal;
public Twitter TwitterUser;
}
如何做到这一点?
虽然ExpandoObject
可以做到这一点,但我显然更喜欢静态类型的选项。如何做到这一点?这不是装饰器模式的目的吗?我相信装饰器模式意味着所有模块之间都有一个共享接口。在这种情况下,Twitter和AD模块是不相关的。不可能以这种方式向类型添加新属性。只能通过添加来动态扩展对象。我能想到的唯一方法是将实际的代码文件放入您的nuget包中,而不是DLL,并按照您的建议使用分部类。@xori这很好,这就是dynamic/ExpandoObject的用途,但我发现这个问题可能对您的其他想法有所帮助。
public class Account {
public string Username;
public UserPrincipal Principal;
public Twitter TwitterUser;
}