获取/设置访问器正确的范围
本文关键字:范围 设置 访问 获取 | 更新日期: 2023-09-27 18:33:50
我创建了一个名为ProfileHelper的类,但我似乎无法正确获取/设置访问器;相反,我在get和set上都得到了红线。 这是我尝试使用的代码:
public static String UserName(string columnName)
{
get
{
using (SqlConnection cn = new SqlConnection(SiteConfig.ConnectionString))
{
string sSql = ("SELECT UserName , LoweredUserName FROM aspnet_Users WHERE UserId = @UserId");
using (SqlCommand cm = new SqlCommand(sSql, cn))
{
cm.Parameters.AddWithValue("@UserId", Membership.GetUser().ProviderUserKey.ToString());
cn.Open();
using (SqlDataReader rd = cm.ExecuteReader())
{
while (rd.Read())
{
return columnName;
}
rd.Close();
}
cn.Close();
}
}
return columnName;
}
set
{
using (SqlConnection cn = new SqlConnection(SiteConfig.ConnectionString))
{
string sSql = ("UPDATE [aspnet_ Users] SET UserName = @UserName, LoweredUserName = @LoweredUserName WHERE UserId = @UserId");
using (SqlCommand cm = new SqlCommand(sSql, cn))
{
cm.Parameters.AddWithValue("@UserId", Membership.GetUser ().ProviderUserKey.ToString());
cn.Open();
cm.ExecuteNonQuery();
cn.Close();
}
}
}
}
这是一种方法,而不是属性。 只有属性具有 get 和 set 访问器。 选一个。
public static String UserName(string columnName) // this implies a method
{
get // this implies a property
{
语法
基本上是:
private string userName;
public string UserName // no parameter here!
{
get { return this.userName; }
set { this.userName = value; } // value is a keyword
}
或者,自动属性为您执行支持字段:
public string UserName { get; set; } // equivalent
public string MyExternallyReadOnly { get; private set; } // setter is private
不应在属性中摆弄 SQL 连接。访问财产应该快速可靠。考虑用方法替换它,以明确这实际上是对外部依赖项的持久操作(更有可能失败):
public string GetUserName() { }
public void UpdateUserName() {}
你应该
做一对方法,GetUserName(string columnName)
和SetUserName(string columnName, string value)
。 当可能需要一段时间时,这是首选方法,例如,因为您正在建立数据库连接,并让您轻松拥有参数。
public static String UserName(string columnName)
是方法的签名。 public static String UserName
将是一个财产。 属性具有 get/set 访问器,方法没有。 您需要更改此设置。 属性不允许参数,除了索引属性,它们不能是静态的(例如,像myObj[someColumnName]
一样使用,像public string this[string columnName]
一样声明)。 如果您希望访问该属性,例如 var something = ProfileHelper.UserName;
,只需使用属性。