Создание одного вспомогательного метода для разных типов через интерфейс c #

Просто добавьте что-то примечательное здесь.


myQueue.hpp:

template <class T> 
class QueueA {
    int size;
    ...
public:
    template <class T> T dequeue() {
       // implementation here
    }

    bool isEmpty();

    ...
}    

myQueue можно определить методы шаблонного класса, которые просто прекрасны в файле реализации. cpp:

// implementation of regular methods goes like this:
template <class T> bool QueueA<T>::isEmpty() {
    return this->size == 0;
}


main()
{
    QueueA<char> Q;

    ...
}
1
задан dzenesiz 16 January 2019 в 10:36
поделиться

2 ответа

Я не совсем уверен, каков ваш общий вариант использования, но, возможно, было бы полезно сделать метод OrderChildren универсальным, как показано ниже:

public static class ChildOrderHelper
{
  public static IEnumerable<T> OrderChildren<T>(IEnumerable<T> children) where T : IHasChildID
  {
    var childrenList = children.ToList();
    //just a simple example of what I'm guessing the method could do...
    return childrenList.OrderBy(c => c.GetChildID()).ToList();
  }
}

И вызвать его следующим образом:

List<Child> originalList = GetChildren();
List<Child> orderedList = ChildOrderHelper.OrderChildren<Child>(originalList).ToList();
0
ответ дан Jonas Høgh 16 January 2019 в 10:36
поделиться

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

Ниже приведен пример исходного кода.

using System;
using System.Linq;
using System.Collections.Generic;
using System.Collections;

public class Program
{
    public static void Main()
    {
        var parents = new List<Parent>();
        parents.Add(new Parent{ChildId = "123"});
        parents.Add(new Parent{ChildId = "321"});
        parents.Add(new Parent{ChildId = "456"});

        var result = ChildHelpers.OrderChildren(parents);

        foreach(var res in result) {
            Console.WriteLine(res.ChildId);
        }
        Console.WriteLine("Hello World");
    }
}

public interface IChild {
    string ChildId {get;set;}
}

public class Child : IChild {
    public string Name {get;set;}
    public string ChildId {get;set;}
}

public class Parent : IChild {
    public Parent() {
        child = new Child();
    }
    public Child child {get;set;}
    public string ChildId {
        get{
            return child.ChildId;
        }
        set{
            child.ChildId = value;
        }
    }
}

public class AnotherChild : IChild {
    public string Description{get;set;}
    public string ChildId {get;set;}
}

public static class ChildHelpers {
    public static IEnumerable<IChild> OrderChildren(IEnumerable<IChild> children)
    {
        return children.OrderBy(c=>c.ChildId).AsEnumerable();
    }
}

Если вы хотите обойти этот пример и посмотреть другие варианты, если необходимо, см. эту ссылку.

0
ответ дан Saravanan 16 January 2019 в 10:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: