C# 访问基类变量C
我有基础课C# 访问基类变量C,c#,C#,我有基础课 public class X { public int Id; public int i; } 和派生类 public class Y : X { //other variables } 我的解决方案中有3个项目。X类在项目A中,Y类在项目B中,而在项目C中,我正试图做到: Y newY = new Y(); newY. // this is where no variables from base class are showed (no Id or i) 如
public class X
{
public int Id;
public int i;
}
和派生类
public class Y : X
{
//other variables
}
我的解决方案中有3个项目。X类在项目A中,Y类在项目B中,而在项目C中,我正试图做到:
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项目B确实需要引用项目A,因为Y类派生自X类,并且一些父功能仅写在项目A中
所以在邮件项目中只添加ProjectB而不是ProjectA的引用,并且尝试调用ProjectB的功能肯定会在编译时失败
如下图所示
//of Project A
public class X
{
public string XStr;
public void MethodOfX()
{
}
}
//of Project A
public class X
{
public string XStr;
public void MethodOfX()
{
Console.WriteLine("Method of x");
}
}
及
您可以看到,在这里您也可以访问类x的属性。作为项目A的参考,已添加到项目B中
在主课上。如果我们尝试以下操作,只需添加ProjectB的引用
static void Main(string[] args)
{
Y y = new Y();
y.MethodOfY();
}
在Y=newy时,我们将在编译时得到此错误
类型“ProjectA.X”是在未引用的程序集中定义的。您必须添加对程序集“ProjectA,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”的引用
这里的错误是不言自明的。它只是简单地说,在我们的例子中,为了执行Y=newy,您需要处理ProjectA.X,这是因为我们继承了它,而拥有ProjectA.X定义的程序集尚未在主项目中引用
看看这个
在这里,我们让Y继承X,我们也需要在主项目中添加ProjectA的引用,因为在这种情况下,Y包含ProjectA中定义的一些功能
由于我们还没有在主项目中添加ProjectA的引用,在主项目中,我们正在尝试创建Y的对象,该对象将无法公开Y的那些在ProjectA中定义的功能和成员
但如果我们像下面这样更改代码
//of Project A
public class X
{
public string XStr;
public void MethodOfX()
{
}
}
//of Project A
public class X
{
public string XStr;
public void MethodOfX()
{
Console.WriteLine("Method of x");
}
}
及
请注意,现在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方法时,即使该方法在内部也调用了x方法,如果在调试时,应用程序的运行路径中存在ProjectA的dll(通常在Debug文件夹中),也会处理该调用
注意:如果ProjectA的dll在任何情况下都不存在,它将在调用MethodOfY时抛出一个exeption,说它无法加载ProjectA dll,当然是因为它不存在他说每个类在单独的dll中,使用不同的dll来使用Y类,并且没有IntelliSense你绝对需要一个c=>一个引用;使用nuget包引用,它现在可能是可传递的;如果您想从项目C访问项目A中的类X,则必须有项目C->项目A的引用。如果您有项目B->项目A和项目C->项目B,Visual Studio可能会在后台添加项目C->项目A。您能解释一下为什么吗?因为据我所知,我在项目C中使用的是项目B中的一个类,我引用了项目C中的项目B?因为X的定义,可以说它的元数据,在项目a中。