C#是否可以从类中的属性调用方法
本文关键字:属性 调用 方法 是否 | 更新日期: 2023-09-27 18:14:04
所以我对编程很陌生,我尝试通过尝试很多东西来学习新东西。但此刻我陷入了困境。。。
基本上,我试图实现的是能够使用以下代码行:Url.QueryStringParser.HasParam("");
Url是类,QueryStringParser
是Url类中的属性,HasParam
是QueryStringParser
类中的方法。它是有效的,除了我在QueryStringParser
属性上得到一个NullReferenceException
这一事实。我不明白为什么会发生这种事。。。
这是Url
类。
public class Url
{
public static QueryStringParser QueryStringParser { get; private set;}
}
这是QueryStringParser类。
public class QueryStringParser
{
public bool HasParam(string parameter)
{
return !string.IsNullOrEmpty(HttpContext.Current.Request[parameter]);
}
}
这是我的asp.net网页。
if (Url.QueryStringParser.HasParam("Id"))
{
// Do stuff.
}
所以我的问题是,是否有可能创造出我刚才提到的东西?
您的问题在于属性QueryStringParser
要调用方法HasParam
,需要对象QueryStringParser
的实例(名称选择错误(。此实例从未由您的代码创建,因此为NullReferenceException
因此,您需要在属性的获取和设置中更改一些代码
public class Url
{
private static QueryStringParser _qsp = null;
public static QueryStringParser QueryStringParser
{
get
{
if(_qsp == null) _qsp = new QueryStringParser();
return _qsp;
}
private set
{
_qsp = value;
}
}
}
通过此更改,当您需要该属性时,您的代码将检查它是否为null,并初始化用于存储QueryStringParser实例的内部对象,然后返回此实例。
绕过异常的另一种可能性是使HasParam方法也是静态的,在这种情况下,您不需要对象QueryStringParser的实例。
顺便说一句,当它工作时,我发现将属性命名为类非常令人困惑。我建议为属性QueryStringParser
选择另一个名称
您所需要做的就是在URL:的静态构造函数中为其分配一个实例
public class Url
{
public static Url()
{
QueryStringParser = new QueryStringParser();
}
public static QueryStringParser QueryStringParser { get; private set;}
}
public class Url
{
public static QueryStringParser QueryStringParser { get; private set; }
}
这是不对的——你需要创建一个类的实例来访问它的方法和属性。我认为研究并解决这个问题对你来说是一个很好的学习练习。