C# 如何调用三个独立类的方法?
我有一门课叫“学位” 它有一个名为“getDegree()”的方法,用于打印“我获得了学位” “学位”班还有两个子班,分别名为“本科”和“研究生” 每种方法都有一个“getDegree()”方法,分别打印“我是本科生”和“我是研究生” 我想知道如何通过为每三个类创建单独的对象来调用'getDegree()'方法 这是我的密码C# 如何调用三个独立类的方法?,c#,class,object,methods,C#,Class,Object,Methods,我有一门课叫“学位” 它有一个名为“getDegree()”的方法,用于打印“我获得了学位” “学位”班还有两个子班,分别名为“本科”和“研究生” 每种方法都有一个“getDegree()”方法,分别打印“我是本科生”和“我是研究生” 我想知道如何通过为每三个类创建单独的对象来调用'getDegree()'方法 这是我的密码 class Program { class Degree { static void getDegree() {
class Program
{
class Degree
{
static void getDegree()
{
Console.WriteLine("I got a degree");
}
class Undergraduate
{
static void getDegree()
{
Console.WriteLine("I am an Undergraduate");
}
}
class Postgraduate
{
static void getDegree()
{
Console.WriteLine("I am a Postgraduate");
}
}
}
}
static void Main(string[] args)
{
Degree.x;
Undergraduate.y;
Postgraduate.z;
x.getDegree();
y.getDegree();
z.getDegree();
Console.ReadLine();
}
你的语法错了。应该是:
Degree x = new Degree();
Degree.Undergraduate y = new Degree.Undergraduate();
Degree.Postgraduate z = new Degree.Postgraduate();
x.getDegree();
y.getDegree();
z.getDegree();
请注意,您在学位
中嵌套了本科生
和研究生
,这有点不寻常
还要注意,Main
应该在程序中
同样在上面的注释中,static
应该被删除
另外,这些方法需要声明为public
全文:
using System;
class Program
{
class Degree
{
public void getDegree()
{
Console.WriteLine("I got a degree");
}
public class Undergraduate
{
public void getDegree()
{
Console.WriteLine("I am an Undergraduate");
}
}
public class Postgraduate
{
public void getDegree()
{
Console.WriteLine("I am a Postgraduate");
}
}
}
static void Main(string[] args)
{
Degree x = new Degree();
Degree.Undergraduate y = new Degree.Undergraduate();
Degree.Postgraduate z = new Degree.Postgraduate();
x.getDegree();
y.getDegree();
z.getDegree();
Console.ReadLine();
}
}
你应该读一点面向对象编程的概念
您所指的子类实际上不是一个子类,而是一个嵌套类。要使本科
和研究生
类成为学位
的子类,您需要执行以下操作:
class Degree {}
class Undergraduate : Degree {}
class Postgraduate : Degree {}
public class Degree
{
public virtual string GetDegree()
{
return "I am a degree";
}
}
public class Undergraduate : Degree
{
public override string GetDegree()
{
return "I am an undergrad";
}
}
public class Postgraduate : Degree
{
public override string GetDegree()
{
return "I am a postgrad";
}
}
这是第一部分
所以现在你想把本科生和研究生当作学位。您将把getDegree方法定义为virtual。(顺便说一句,我建议您遵循C#Style指南,并用PascalCase->GetDegree编写)
然后,在类中,您可以重写该方法,并为每个子类提供自己的实现。因此,您的类可以如下所示:
class Degree {}
class Undergraduate : Degree {}
class Postgraduate : Degree {}
public class Degree
{
public virtual string GetDegree()
{
return "I am a degree";
}
}
public class Undergraduate : Degree
{
public override string GetDegree()
{
return "I am an undergrad";
}
}
public class Postgraduate : Degree
{
public override string GetDegree()
{
return "I am a postgrad";
}
}
最后,您可以声明对象,并且所有对象都属于相同的类型(度):
这里的继承权有些混乱
对继承正确性的一个简单测试是“是一种”关系。如果我们可以合理地说“猫是哺乳动物”,那么我们可能有正常的遗传(尽管还有更彻底的测试)
那么我们可以说“本科生是一种学位”吗
狡猾。这取决于我们所说的本科生。是个人的还是一种学位?从类名上看不清楚,但getDegree()
表明是个人:“我是一名本科生”
总而言之,我要说:
“本科生是一种学生”
“理学学士。是一种学位
看起来很挑剔,但如果你弄错了,这些东西最终会反过来咬你。也许你只需要将方法从静态
更改为公共
,然后使用新建
创建实例和调用方法。你有两个“子类”。你没有。您有两个“嵌套类”。如果您想要子类,那么您希望继承它们,而不是嵌套它们。请回答OP提出的问题-同时显示您的类版本。@Enigmativity'我想知道如何调用'getDegree()“通过为每三个类创建单独对象的方法。”我怎么不回答这个问题?我建议您解释OP对其现有代码的错误,并解释各种修复方法。你已经给出了我能想到的两个直接答案中的一个。你已经错过了OP实际上可能要做的事情-那就是使用继承。我不是批评,只是试图帮助你为OP找到一个好的答案。这可能是我的错误。我认为创建子类和嵌套基本上是一样的。这就是为什么我最后给它们筑巢。贾斯珀,@Enigmativity,我真的很感谢你在这里的指导。你的两个回答帮助我清楚地认识到我的错误。现在我知道了如何创建子类以及如何通过对象调用方法,无论是子类还是嵌套类!谢谢大家!:)我喜欢你这样做。既然你可以把它放在一个答案中,为什么还要创建一个新答案呢?你的论点似乎很好。是的,我总是想知道多个答案,但它们在完全不同的问题上得到了解决。一个是简单的语法,这个是OOD。这两者之间并没有任何相互关系。我会用一个答案讲一个故事。把OP从他们现在的位置带到他们应该在的位置。