Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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语言实现面向对象查询#_C#_Oop_Interface - Fatal编程技术网

C# 用c语言实现面向对象查询#

C# 用c语言实现面向对象查询#,c#,oop,interface,C#,Oop,Interface,我对类和接口的实现有一些疑问 我有两个这样的班 Public Class A:IFinal { private string name=string.Empty; A() { name = "Pankaj"; } public string MyName() { return name; } public strin

我对类和接口的实现有一些疑问

我有两个这样的班

Public Class A:IFinal
  {
      private string name=string.Empty;

        A()
        {
            name = "Pankaj";
        }

        public string MyName()
        {
            return name;
        }

        public string YourName()
        {
            return "Amit";
        }
   }

Public  Class B:IFinal
 {
     private string name=string.Empty;

        B()
        {
            name = "Amit";
        }

        public string GetNane()
        {
            return name;
        }

        public string YourName()
        {
            return "Joy";
        }
   }
问题:

  • 现在我有了一个接口IFinal,我想在类a和B中为方法YourName()实现这个接口,如下所示

    Public Class A:IFinal
      {
          private string name=string.Empty;
    
            A()
            {
                name = "Pankaj";
            }
    
            public string MyName()
            {
                return name;
            }
    
            public string YourName()
            {
                return "Amit";
            }
       }
    
    Public  Class B:IFinal
     {
         private string name=string.Empty;
    
            B()
            {
                name = "Amit";
            }
    
            public string GetNane()
            {
                return name;
            }
    
            public string YourName()
            {
                return "Joy";
            }
       }
    
    公共接口IFinal {

  • 可以用这种方式实现吗?如果可以,那么我如何在接口中声明YourName(),以及如何使用它

  • 可以在接口中声明虚拟方法吗?就像在类A和B中一样,我们有一个需要在接口中声明的虚拟方法

  • Pankaj-IFinal中的代码格式和值使您很难理解您正在尝试执行的操作。根据提供的内容,由于您已经两次定义了相同的属性(string YourName();),因此示例无法编译

    你能重做这个问题来澄清你的意图吗。。。 谢谢

    [编辑]-我想我可能“理解”了您的要求-即如何定义接口。给您:

    public interface IFinal
    {   
        string YourName{ get; set; }
    }
    
    然后,按照以下步骤声明变量:

    IFinal classA = new A();
    IFinal classB = new B();
    

    然后,party hard:)

    如果您将接口声明为

    
    接口IFinal{
    字符串YourName();
    }


    这两个类都必须实现我认为您所要求的功能。

    您可以在实现中使方法虚拟化,例如:

    interface IFinal
    {
        string YourName();
    }
    
    class A: IFinal
    {
        public virtual string YourName() { return "Amit"; }
    }
    
    class B: IFinal
    {
        public virtual string YourName() { return "Joy"; }
    }
    
    或者您可以使用a和B都派生自的公共基本实现,例如

    interface IFinal
    {
        string YourName();
    }
    
    abstract class FinalBase : IFinal
    {
        public virtual string YourName() { return string.Empty; }
    }
    
    class A : FinalBase
    {
        public override string YourName()
        {
            return "A";
        }
    }
    
    class B : FinalBase
    {
        public override string YourName()
        {
            return "B";
        }
    }
    
    class C : A
    {
        public override string YourName()
        {
            return "C";
        }
    }
    
    new A().YourName(); // A
    new B().YourName(); // B
    
    IFinal b = new B();
    b.YourName(); // B
    
    FinalBase b = new C();
    b.YourName(); // C
    

    您拥有接口的反向视图。首先必须在接口中声明方法,然后必须在实现接口的类中转移到实现。您采取了另一种方式

    首先声明接口中的方法

    interface IFinal { 
    string YourName(); 
    }
    
    然后

    }

    在这里,类A和B实现接口IFinal及其方法YourName()

    调用相应类中的方法

    IFinal clsA= new A();
    IFinal clsB= new B();
    

    如果你想让
    IFinal
    有两个方法,一个从类
    A
    返回
    YourName
    ,另一个从类
    B
    返回
    YourName
    ,那么你需要引入第三个类(我们称之为
    C
    )然后将
    IFinal
    上的
    YourName
    方法更改为不同的-一个接口上不能有两个签名完全相同的方法

    因此:


    话虽如此,我真的不确定你问的是这个问题还是这样做有意义。您必须让我们知道您尝试做什么的更多细节。

    什么?我不明白你的问题。接口中的所有方法都是virtual.chuck-这不起作用,您需要get/sett'ers(oops,但当然只有在属性存在的情况下):0是的,我正在实现字符串YourName();但如何使用这个接口?假设我想通过接口访问类A方法@@jim..是的jim。。我如何使用这个接口?假设我想通过interfaceYourName()访问类A方法,在这个问题上,YourName()是一个方法,而不是一个属性。否则,我同意。@pankaj-请参见上面关于类的声明。@@Winston Smith。。谢谢。。。很好的例子
    Public Class B:IFinal
    {
        public string YourName()
        {
            return "Joy";
        }
    }
    
    IFinal clsA= new A();
    IFinal clsB= new B();
    
    public interface IFinal
    {
        string YourNameA();
        string YourNameB();
    }
    
    public class C : IFinal
    {
        public A A {get; set;}
        public B B {get; set;}
    
        public string YourNameA()
        {
            return this.A.YourName();
        }
    
        public string YourNameB()
        {
            return this.B.YourName();
        }
    }