[英]Accessing base class variables C#
我有基类
public class X
{
public int Id;
public int i;
}
和派生类
public class Y : X
{
//other variables
}
我的解决方案中有 3 个项目。 X 类在项目 A 中,Y 类在项目 B 中,在项目 CI 中我正在尝试执行以下操作:
Y newY = new Y();
newY. // this is where no variables from base class are showed (no Id or i)
如果我从项目 C 中引用项目 A,它就可以工作。 但是我可以不从 C 引用项目 A 吗?
现有的参考是:B -> A 和 C -> B
Project B
确实需要引用Project A
因为类 Y 派生自类 X,并且一些父功能仅在Project A
中编写。
因此,在您的邮件项目中仅添加对ProjectB
(而不是ProjectA
)的引用,并尝试调用ProjectB
功能肯定会在编译时失败。
像下面。
//of Project A
public class X
{
public string XStr;
public void MethodOfX()
{
}
}
和
// of Prject B
public class Y : X
{
public string YStr;
public void MethodOfY()
{
//values form Project A is available
// as assembly reference has added here
YStr = XStr;
MethodOfX();
}
}
你可以看到,在这里你也可以访问类 x 的属性。 作为ProjectA
参考已添加到ProjectB
。
并在主班。 如果我们尝试以下操作,则仅添加对ProjectB
引用。
static void Main(string[] args)
{
Y y = new Y();
y.MethodOfY();
}
在Y y = new Y()
我们将在编译时收到此错误,
类型“ProjectA.X”是在未引用的程序集中定义的。 您必须添加对程序集“ProjectA,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”的引用。
这里的错误是不言自明的。 它只是说明为了执行Y y = new Y()
你需要处理ProjectA.X
(在我们的例子中是因为我们继承了它)和具有ProjectA.X
定义的程序集尚未在主要项目。
看看这个问题
因为在这里我们让Y
继承X
我们需要在我们的主项目中添加对ProjectA
引用,因为在这种情况下Y
持有一些在ProjectA
定义的功能。
由于我们没有在我们尝试创建 Y 对象的主项目中添加ProjectA
的引用,该对象将无法公开 Y 的那些在ProjectA
中定义的功能和成员
但是如果我们像下面这样改变我们的代码。
//of Project A
public class X
{
public string XStr;
public void MethodOfX()
{
Console.WriteLine("Method of x");
}
}
和
// of Prject B
public class Y
{
public string YStr;
public void MethodOfY()
{
Console.WriteLine("Method of Y");
X x = new X();
//values form Project A is available
// as assembly reference has added here
YStr = x.XStr;
x.MethodOfX();
}
}
请注意,现在 Y 没有继承 X,而是简单地创建 X 的一个实例并使用它。
static void Main(string[] args)
{
try
{
Y y = new Y();
y.MethodOfY();
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.Read();
}
在我们的主项目中,即使只添加了ProjectB
而不是ProjectA
引用,上面的代码也不会导致任何异常。 因为这里在创建Y
主项目的对象时不需要处理ProjectA
因为 Y 的所有功能和成员仅在projectB
。
并且在调用MethodOfY()
方法时,即使该方法MethodOfY()
内部调用 x 的方法,如果ProjectA
dll 存在于应用程序的运行路径中(如果您正在调试,通常在 Debug 文件夹中),则将处理此调用。
注意:如果 ProjectA 的 dll 在任何情况下都不存在,它会在调用MethodOfY()
时抛出一个MethodOfY()
,说它无法加载ProjectA
dll(当然因为它不存在那里)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.