Метод описания интерфейса, который использует некоторый параметр этого класса - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть пара классов, которые реализуют один метод:

class ClassA : BaseClass
{
    void Copy(ClassA a) {}
}

class ClassB : BaseClass
{
    void Copy(ClassB b) {}
}

Я хочу описать эти методы в интерфейсе.Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Используйте универсальный интерфейс. Используя where, вы можете ограничить параметр типа T до BaseClass и его производные типы.

interface Interface<T> where T : BaseClass 
{
    void Copy<T>(T t);
}

class ClassA : BaseClass, Interface<ClassA>
{
    public void Copy(ClassA b) {}
}

class ClassB : BaseClass, Interface<ClassB>
{
    public void Copy(ClassB b) {}
}
0 голосов
/ 25 апреля 2018

вы можете использовать Generic interface, например, как показано ниже

interface ICopy<T>
{
  void Copy<T>(T t)
}

Class A: ICopy<A>,BaseClass//(if you need baseclass)
{
  public void Copy(A a)
  {}
}
Class B: ICopy<B>,BaseClass//(if you need baseclass)
{
  public void Copy(B b)
  {}
}

, вы также можете попробовать ICloneable встроенный интерфейс, если вы просто хотите сделатьклон вашего класса,

Это просто предложение

class Rock : ICloneable
{
    int _weight;
    bool _round;
    bool _mossy;

    public Rock(int weight, bool round, bool mossy)
    {
        this._weight = weight;
        this._round = round;
        this._mossy = mossy;
    }

    public object Clone()
    {
        return new Rock(this._weight, this._round, this._mossy);
    }    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...