我创建了一个类和派生类。如何从另一个类调用派生类?请参阅下面的类,派生类(扩展类)以及我调用派生类的位置。
UserPrincipal
上课:
private UserPrincipal GetUserFromAD1(string userLoginName)
{
String currentUser = userLoginName;
String domainName = userLoginName.Split('\\')[0];
UserPrincipal user = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainName))
{
user = UserPrincipal.FindByIdentity(pc, System.DirectoryServices.AccountManagement.IdentityType.SamAccountName, currentUser);
}
});
return user;
}
扩展UserPrincipal
课程:
[DirectoryObjectClass("user")]
[DirectoryRdnPrefix("CN")]
public class UserPrincipalExtended : UserPrincipal
{
public UserPrincipalExtended(PrincipalContext context): base(context)
{
}
[DirectoryProperty("department")]
public string department
{
get
{
if (ExtensionGet("department").Length != 1)
return null;
return (string)ExtensionGet("department")[0];
}
set { this.ExtensionSet("department", value); }
}
方法
private void GetUserInfoFromAD1()
{
try
{
XPathNavigator rootNode = this.MainDataSource.CreateNavigator();
this.initialData = rootNode.SelectSingleNode("/my:myFields/my:Wrapper", this.NamespaceManager).OuterXml;
using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
using (SPWeb web = site.OpenWeb())
{
UserPrincipalExtended userFromAD = this.GetUserFromAD1(web.CurrentUser.LoginName);
在代码行
this.GetUserFromAD1(web.CurrentUser.LoginName)
我收到错误:
无法隐式转换类型.......
答案 0 :(得分:0)
您似乎正在尝试将UserPrincipal
返回的GetUserFromAD1
实例分配给UserPrincipalExtended
类型的变量。
这不是可以隐式执行的类型转换。
您可以隐式地将类型的实例分配给其超类型(或其超类型或其实现的接口)。
您不能隐式地将类型的实例分配给该类型的子类型。
请考虑在department
上实施UserPrincipal
作为扩展方法,或者使UserPrincipalExtended
成为UserPrincipal
实例的包装器,或者提供强制转换操作符来转换UserPrincipal
转到UserPrincipalExtended
,或使用复制构造函数。
有许多设计可以用于此目的。你写的那个不会。