需要帮助从子类访问封闭类中的属性

发布于 2024-08-19 16:48:07 字数 3296 浏览 2 评论 0原文

我遇到了问题。我有一个基于 Randy Patterson 的流畅界面示例的子类:

Randy Patterson 的流畅界面设计页面

我正在对 User 类进行子类化,并且需要将其中设置的属性传递给 UserFluentInterface 子类中的以下 CreateNewUser 方法。

public void CreateNewUser()
              {

                    try
                    {
                        User user = (User)_User;

                        MembershipCreateStatus status;
                        MembershipUser memuser = _membership.CreateUser(user, out status);

                    }
                    catch (Exception e)
                    {
                        string message = e.Message;
                    }

                }

并且 _membership.CreateUser 具有签名:

public MembershipUser CreateUser(User user, out MembershipCreateStatus status);

我收到错误:

无法访问非静态成员 外部类型“MyProject.Schema.User”通过 嵌套类型 'MyProject.Schema.User.UserFluentInterface'

我不知道如何解决这个问题。代码如下:

User user = _someAPI.GetUserProfile(txtEmail.Text);

user.Set
  .Email(txtEmail.Text)
  .Password(txtPassword.Text)
  .CreateNewUser();

现在,我有一个带有子类的 User 类:

 public class User : ProfileBase, ISessionMgrEntry
    {
        MyMembershipProvider _membership = null;
        UserFluentInterface _set = null;

        public User()
        {
            _membership = (MyMembershipProvider)Membership.Providers["MyMembershipProvider"];
            _set = new UserFluentInterface(this);
        }

        public UserFluentInterface Set
        {
            get { return _set; }
        }

        #region ProfileBase Members

            [SettingsAllowAnonymous(false), CustomProviderData("Email;string")]
            public string Email { get { return base["Email"] as string; } set { base["Email"] = value; } }

[SettingsAllowAnonymous(false), CustomProviderData("Password;string")]
            public string Password { get { return base["Password"] as string; } set { base["Email"] = value; } }


           public class UserFluentInterface
            {
                private readonly User _User;

                public UserFluentInterface(User User)
                {
                    _User = User;
                }

                public UserFluentInterface Email(string email)
                {
                    _User.Email = email;
                    return this;
                }

                public UserFluentInterface Password(string password)
                {
                    _User.Password = password;
                    return this;
                }

                public void CreateNewUser()
                {

                    try
                    {
                       User user = ???? // HOW DO I ACCESS THE PROPERTIES THAT WERE ORIGINALLY SET AND PASS THEM AS AN OBJECT BELOW?                        

                        MembershipUser memuser = _membership.CreateUser(user);

                    }
                    catch (Exception e)
                    {
                        string message = e.Message;
                    }

                }

            }

       }

I am having problems. I have a subclass based on Randy Patterson's fluent interface example here:

Randy Patterson's Fluent Interface Design Page

I am subclassing a User class and need to pass the properties set in it to the below CreateNewUser method within the UserFluentInterface subclass.

public void CreateNewUser()
              {

                    try
                    {
                        User user = (User)_User;

                        MembershipCreateStatus status;
                        MembershipUser memuser = _membership.CreateUser(user, out status);

                    }
                    catch (Exception e)
                    {
                        string message = e.Message;
                    }

                }

and _membership.CreateUser has the signature:

public MembershipUser CreateUser(User user, out MembershipCreateStatus status);

I am getting the error:

Cannot access a non-static member of
outer type 'MyProject.Schema.User' via
nested type
'MyProject.Schema.User.UserFluentInterface'

I am not sure how resolve this. Code is as follows:

User user = _someAPI.GetUserProfile(txtEmail.Text);

user.Set
  .Email(txtEmail.Text)
  .Password(txtPassword.Text)
  .CreateNewUser();

Now, I have a User class with a subclass:

 public class User : ProfileBase, ISessionMgrEntry
    {
        MyMembershipProvider _membership = null;
        UserFluentInterface _set = null;

        public User()
        {
            _membership = (MyMembershipProvider)Membership.Providers["MyMembershipProvider"];
            _set = new UserFluentInterface(this);
        }

        public UserFluentInterface Set
        {
            get { return _set; }
        }

        #region ProfileBase Members

            [SettingsAllowAnonymous(false), CustomProviderData("Email;string")]
            public string Email { get { return base["Email"] as string; } set { base["Email"] = value; } }

[SettingsAllowAnonymous(false), CustomProviderData("Password;string")]
            public string Password { get { return base["Password"] as string; } set { base["Email"] = value; } }


           public class UserFluentInterface
            {
                private readonly User _User;

                public UserFluentInterface(User User)
                {
                    _User = User;
                }

                public UserFluentInterface Email(string email)
                {
                    _User.Email = email;
                    return this;
                }

                public UserFluentInterface Password(string password)
                {
                    _User.Password = password;
                    return this;
                }

                public void CreateNewUser()
                {

                    try
                    {
                       User user = ???? // HOW DO I ACCESS THE PROPERTIES THAT WERE ORIGINALLY SET AND PASS THEM AS AN OBJECT BELOW?                        

                        MembershipUser memuser = _membership.CreateUser(user);

                    }
                    catch (Exception e)
                    {
                        string message = e.Message;
                    }

                }

            }

       }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怀中猫帐中妖 2024-08-26 16:48:07

我认为您必须将用户和成员资格传递到 UserFluentInterface: 中,

            public class UserFluentInterface
            {
                private readonly User _User;
                private readonly Membership _Membership;

                public UserFluentInterface(User User, Membership membership)
                {
                    _User = User;
                    _Membership = membership;
                }
            }

然后使用 _Membership 而不是 _membership。在你的 CreateNewUser() 方法中

I think you're going to have to pass both user and membership into your UserFluentInterface:

            public class UserFluentInterface
            {
                private readonly User _User;
                private readonly Membership _Membership;

                public UserFluentInterface(User User, Membership membership)
                {
                    _User = User;
                    _Membership = membership;
                }
            }

and then use _Membership instead of _membership. in your CreateNewUser() method

鼻尖触碰 2024-08-26 16:48:07

如果您不需要 _User 的副本,则可以只编写 User user = _User

否则,复制 _User 并将其传递。

You can just write User user = _User, if you don't need a copy of _User.

Otherwise, make a copy of _User and pass it on.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文