需要帮助从子类访问封闭类中的属性
我遇到了问题。我有一个基于 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为您必须将用户和成员资格传递到 UserFluentInterface: 中,
然后使用 _Membership 而不是 _membership。在你的 CreateNewUser() 方法中
I think you're going to have to pass both user and membership into your UserFluentInterface:
and then use _Membership instead of _membership. in your CreateNewUser() method
如果您不需要
_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.