Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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#_.net_Interface_Abstract Class_Abstract Methods - Fatal编程技术网

C# 关于抽象方法和接口方法的问题

C# 关于抽象方法和接口方法的问题,c#,.net,interface,abstract-class,abstract-methods,C#,.net,Interface,Abstract Class,Abstract Methods,大家好,我对抽象类和接口有些怀疑 我不是在问接口和抽象类之间的区别。我只是想问一下抽象方法和接口方法的区别 抽象方法与接口方法相同。我知道,如果我们继承子类中的接口和抽象类,那么我们必须实现这些边方法,但我们不能实现非抽象方法。所以 我的问题是抽象方法和接口有什么不同 及 2.另一个问题是我们可以在抽象类中部分实现非抽象方法,是否可以在抽象类中部分实现抽象方法 我也提到了很多网站,但没有一个网站给出了第二个问题的解决方案 代码问题 这是我的抽象类,有一个抽象方法(xxx),另一个非抽象方法(yy

大家好,我对抽象类和接口有些怀疑

我不是在问接口和抽象类之间的区别。我只是想问一下抽象方法和接口方法的区别 抽象方法与接口方法相同。我知道,如果我们继承子类中的接口和抽象类,那么我们必须实现这些边方法,但我们不能实现非抽象方法。所以

  • 我的问题是抽象方法和接口有什么不同
  • 2.另一个问题是我们可以在抽象类中部分实现非抽象方法,是否可以在抽象类中部分实现抽象方法

    我也提到了很多网站,但没有一个网站给出了第二个问题的解决方案

    代码问题

    这是我的抽象类,有一个抽象方法(xxx),另一个非抽象方法(yyy)和接口方法(xxx)

    我在另一个班上继承了这两个

    public class OrdinaryClass : AbstractRam
    {
        public OrdinaryClass()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        public override int xxx()
        {
            return 1;
        }
    }
    
    public class OrdinaryClass2 : InterfaceRam
    {
        public OrdinaryClass2()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        public int xxx()
        {
            return 1;
        }
    }
    
    让我们看看我的xxx方法,两种方法都是一样的,没有太大的区别

    问:有什么区别吗?如果是一样的,那么哪一个是最好的方法

  • 接口方法是抽象方法。是的,它们与抽象类中的抽象方法相同,因为两者都是抽象的。但这里需要注意的是多态性发挥作用时如何处理它们。下面的代码可以说明这一点:

    interface IA 
    { 
        int xxx(); 
    }
    
    abstract class B 
    { 
        public abstract int yyy();
    }
    
    class C : B, IA
    {
        public int xxx()
        {
            return 1;
        }
    
        public int yyy()
        {
            return 1;
        }
    }
    
  • yyy
    定义实际上隐藏了B中的抽象方法,需要声明为
    public override int yyy()…
    ,以防止出现这种情况

  • 不可以。您不能“部分实现抽象类中的非抽象方法”。您可以通过提供一些具体方法和一些抽象方法来部分实现抽象类。但是,您不能“部分实现”抽象方法。抽象类中的方法要么是抽象的,要么不是抽象的

  • 在您的代码示例中,
    OrdinaryClass
    提供了
    xxx
    的一个实现
    OrdinaryClass2
    隐藏了这个抽象方法,并提供了它自己的
    xxx
    。如(1)所述。请阅读C中隐藏的方法,了解更多详细信息,例如和


  • 最后我自己找到了答案

    • 抽象方法和接口方法的最大区别在于
    我们可以在同一个抽象类内部实现抽象方法,但不能在同一个接口内部实现接口方法


    “部分”是什么意思?这已经被问过很多次了。所以一个新的问题必须更加具体。而且,“我们不能实现非抽象方法”也不是真的。@HenkHolterman嗯,我们可以在父(抽象)中部分实现非抽象方法类,然后我们可以在子类中完全实现该方法,是否可以抽象方法?理解?csc.exe:
    MyMethod()
    无法声明主体,因为它被标记为抽象。抽象(或在VB中MustInherit)方法不能包含实现“实现的方法或其使用可以标记为
    virtual
    ,只要被重写的方法调用基实现,就可以在派生类中被重写。好的。”。好。现在请看我的问题+1对于您的口头解释,您刚才对您的问题提供了一个“抽象类和接口之间的区别是什么”的答案,您声称这不是在问“抽象类和接口之间的区别是什么?”一开始我为你写了几乎相同的词,你抱怨这不是你想要的。失言…:(
    interface IA 
    { 
        int xxx(); 
    }
    
    abstract class B 
    { 
        public abstract int yyy();
    }
    
    class C : B, IA
    {
        public int xxx()
        {
            return 1;
        }
    
        public int yyy()
        {
            return 1;
        }
    }