繁体   English   中英

C#是否可以从类中的属性调用方法?

[英]C# Is it possible to call a method from a property within a class?

所以我对编程很陌生,我尝试通过尝试很多东西来学习新东西。 但此刻我陷入了困境......

基本上我要完成的是能够使用以下代码行: Url.QueryStringParser.HasParam(""); Url是类, QueryStringParser是Url类中的属性, HasParamQueryStringParser类中的方法。 并且它工作,期望我在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.
}

所以我的问题是,是否有可能创造出我刚才提到的东西?

您的问题在于,调用方法HasParam的属性QueryStringParser需要一个对象QueryStringParser的实例(名称选择不当)。 此实例永远不会由您的代码创建,因此NullReferenceException。
因此,您需要在属性的get和set中更改一些代码

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; }
}

您需要创建类的实例来访问其方法和属性,这是不对的。 我认为这是一个很好的学习练习,你可以研究并解决它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM