ООП запрос с использованием C # - PullRequest
2 голосов
/ 13 июля 2010

У меня есть некоторые сомнения по поводу реализации класса и интерфейса

У меня есть 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 у нас есть виртуальный метод, который необходимо объявить в интерфейсе.

Ответы [ 5 ]

5 голосов
/ 13 июля 2010

Вы можете сделать метод виртуальным в вашей реализации, например:

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
3 голосов
/ 13 июля 2010

Pankaj - форматирование кода и значения в IFinal затрудняют понимание того, что вы пытаетесь сделать. в зависимости от того, что предоставлено, образец просто не будет компилироваться по той причине, что у вас одно и то же свойство (string YourName ();), определенное дважды.

Вы можете повторить вопрос, чтобы уточнить свои намерения, плз ... спасибо

[править] - я думаю, что я, возможно, «понимаю», что вы спрашиваете - то есть, КАК определить интерфейс. здесь вы идете:

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

затем объявите ваши переменные следующим образом:

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

тогда, вечеринка усердно:)

1 голос
/ 13 июля 2010

Если вы объявите свой интерфейс как

interface IFinal { <br/> string YourName(); <br /> }

, то оба класса должны будут реализовать эту функцию, которую, я думаю, вы и просите.

0 голосов
/ 13 июля 2010

Если вы пытаетесь заставить 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();
    }
}

Теперь, сказав это, я не совсем уверен, что это то, о чем вы спрашиваете, или это имеет смысл. Вы должны будете сообщить нам более подробно о том, что вы пытаетесь сделать.

0 голосов
/ 13 июля 2010

У вас есть обратный взгляд на интерфейс.Сначала вы должны объявить метод в интерфейсе, а затем перейти к реализации в классах, которые реализуют интерфейс.Вы выбрали другой способ.

Сначала объявите методы в интерфейсе

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...