繁体   English   中英

使用c#进行OOPS查询

[英]OOPS query using c#

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

我有2个这样的课

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";
        }
   }

题:

  1. 现在我有一个接口IFinal,我想在类A和B中实现此接口,方法YourName()就像这样

    公共接口IFinal {

      string YourName();// Class A & Class B } 

是否有可能以这种方式实施? 如果是,那么我如何在界面中声明YourName(),我该如何使用它?

  1. 是否可以在接口中声明虚方法?就像在类A和B中一样,我们有一个需要在接口中声明的虚方法。

您可以在实现中将方法设为虚拟,例如:

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

Pankaj - IFinal中的代码格式和值使得很难弄清楚你想要做什么。 根据提供的内容,然后样本根本无法编译,因为您已经定义了两次相同的属性(字符串YourName();)。

你可以重做这个问题来澄清你的意图吗...谢谢

[编辑] - 我想我可能'理解'你在问什么 - 即如何定义界面。 干得好:

public interface IFinal
{   
    string YourName{ get; set; }
}

然后,声明你的变量:

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

派对很难:)

如果您将接口声明为

interface IFinal {
string YourName();
}

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

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

首先在Interface中声明方法

interface IFinal { 
string YourName(); 
}

然后

Public Class A:IFinal
{
    public string YourName()
    {
        return "Amit";
    }

}

Public Class B:IFinal
{
    public string YourName()
    {
        return "Joy";
    }
}

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

调用各个类中的方法

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

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

所以:

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();
    }
}

现在,说了这些,我不确定这是你要问的,或者这样做是否有意义。 您必须让我们了解您正在尝试做的更多细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM