Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何调用三个独立类的方法?_C#_Class_Object_Methods - Fatal编程技术网

C# 如何调用三个独立类的方法?

C# 如何调用三个独立类的方法?,c#,class,object,methods,C#,Class,Object,Methods,我有一门课叫“学位” 它有一个名为“getDegree()”的方法,用于打印“我获得了学位” “学位”班还有两个子班,分别名为“本科”和“研究生” 每种方法都有一个“getDegree()”方法,分别打印“我是本科生”和“我是研究生” 我想知道如何通过为每三个类创建单独的对象来调用'getDegree()'方法 这是我的密码 class Program { class Degree { static void getDegree() {

我有一门课叫“学位”

它有一个名为“getDegree()”的方法,用于打印“我获得了学位”

“学位”班还有两个子班,分别名为“本科”“研究生”

每种方法都有一个“getDegree()”
方法,分别打印“我是本科生”和“我是研究生”

我想知道如何通过为每三个类创建单独的对象来调用'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从他们现在的位置带到他们应该在的位置。