0

我创建了一个类和派生类。如何从另一个类调用派生类?请参阅下面的类、派生类(扩展类)以及我调用派生类的地方。

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) 

我收到一个错误:

无法隐式转换类型.......

4

1 回答 1

0

您似乎正在尝试将 return UserPrincipalfrom的实例分配给GetUserFromAD1type 的变量UserPrincipalExtended

这不是可以隐式执行的类型转换。

您可以将类型的实例隐式分配给它的超类型(或其超类型或它实现的接口)。

您不能将类型的实例隐式分配给该类型的子类型。

请考虑在 的实例department上实现为扩展方法UserPrincipal或制作UserPrincipalExtended包装器UserPrincipal,或提供强制转换运算符以强制UserPrincipal转换为UserPrincipalExtended,或使用复制构造函数。

有许多设计可以解决这个问题。你写的那个不会。

于 2013-08-21T18:20:33.293 回答