使用c#进行OOPS查询

时间:2010-07-13 11:46:02

标签: c# oop interface

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

我有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& A类中实现这个接口B方法YourName()就像这样

    公共界面IFinal     {

         string YourName();// Class A & Class B
    
    
    }
    
  2. 有可能以这种方式实施吗?如果是,那么我如何在界面中声明YourName()以及如何使用它?

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

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

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

[edit] - 我想我可能会“理解”你在问什么 - 即如何定义界面。你走了:

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

然后,按照以下方式声明您的变量:

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

然后,坚持党:)

答案 2 :(得分:1)

如果您将界面声明为

interface IFinal {
string YourName();
}

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

答案 3 :(得分:0)

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

首先声明接口

中的方法
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();

答案 4 :(得分:0)

如果您尝试让IFinal有两个方法,一个从类YourName返回A,另一个从类YourName返回B然后你需要引入第三个类(让我们称之为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();
    }
}

现在,话虽如此,我不确定这是你要问的,或者这样做是否有意义。您需要让我们了解您正在尝试做的更多细节。