c#继承问题.我无法在继承链中看到方法
本文关键字:继承 方法 问题 | 更新日期: 2023-09-27 18:15:38
我想我可能有c#继承问题。
当运行时,下面的代码产生一个"System类型的异常"。NullReferenceException' occurred"错误消息。
在Visual Studio中调试时,我看到变量"path"在我的"Finder"类中总是为空。
它似乎甚至没有得到"WebConnector"类中的"GetUrl"方法,这可能解释了我得到的null错误消息,但我不确定为什么它不能首先得到该方法。
我继承基类错误吗?
谢谢!
WebConnector.cs:
public class WebConnector
{
public String GetUrl(string Id, String baseUrl)
{
string right = String.Format("/a('{0}')/b", Id);
return baseUrl + right;
}
baseClass.cs:
public class BaseClass
{
public WebConnector Connector { get; set; }
}
Finder.cs:
public class Finder : BaseClass
{
public String GetBuild()
{
var path = Connector.GetUrl(Id, baseUrl); //always null??
}
}
需要一个WebConnector
的实例。您可以在BaseClass
构造函数中创建它:
public class BaseClass
{
public BaseClass()
{
Connector = new WebConnector();
}
public WebConnector Connector { get; set; }
}
正如其他人所说,您永远不会初始化Connector
。这个问题有两个解决方案:
首先,您可以将GetUrl
函数设置为静态,因为它不使用对象本身中的任何内容:
public static String GetUrl(string Id, String baseUrl)
在这种情况下,您甚至不需要对类的引用,因此您可以完全从BaseClass
中删除Connector
并更改GetBuild
函数,如下所示:
var path = WebConnector.GetUrl(Id, baseUrl);
然而,我不认为这是你正在寻找的行为,因为WebConnector
听起来像是你想在某个时候实际初始化的东西。
你可以用两种方式初始化它,任何一种都可以,所以你可以选择。
首先,你可以修改你的Finder
类,包括一个初始化Connector
的构造函数:
public class Finder : BaseClass
{
public Finder()
{
Connector = new WebConnector();
}
public String GetBuild()
{
var path = Connector.GetUrl(Id, baseUrl);
}
}
另一个选项是在BaseClass
中处理这个问题,通过这样修改:
public class BaseClass
{
public WebConnector Connector { get; set; }
public BaseClass(){
Connector = new WebConnector();
}
}
如果你走这条路,Connector
总是在Finder
被调用时被初始化,你实际上可以在Finder
构造函数中使用Connector
(c#总是从最基本的类构建到最派生的类)。