Как использовать где clasue и вызвать метод, используя универсальный параметр в C # - PullRequest
0 голосов
/ 05 июня 2018

У меня есть класс ContainerElementCtrl и MainContainer, в котором я пытаюсь вызвать методы класса ContainerElementCtrl из моего класса MainContainer, используя универсальный параметр, который получает методы setDataInUI в классе MainContainer.

Чтобы добиться этого, я пытаюсь ограничить типы универсальных параметров T, используя where T : DataA, DataB предложение where, которое выдает ошибку.

Как мне этого добиться?

ContainerElementCtrl .cs

public class ContainerElementCtrl : MonoBehaviour
{
    public void setData(DataA tabTypeAData)
    {
        Debug.Log("setData type A " + tabTypeAData.title);
    }

    public void setData(DataB tabTypeBData)
    {
        Debug.Log("setData type B " + tabTypeBData.title);
    }
}

MainContainer.cs

public class MainContainer : MonoBehaviour
{
    public GameObject containerElement;


    public void setDataInUI<T>(T m_tabsData) 
        where T : DataA, DataB
    {
        containerElement.setData(m_tabsData);
    }
}


public class DataA
{
    public string title;
    public string picUrl;
}

public class DataB
{
    public string title;
}

1 Ответ

0 голосов
/ 05 июня 2018

Вы можете предоставить только несколько интерфейсов для ограничений типа и один класс.Поэтому создайте общий интерфейс для ваших классов данных и используйте его в качестве ограничения.Вы также должны использовать один общий метод в ContainerElementCtrl

public class ContainerElementCtrl : MonoBehaviour
{
    public void SetData<T>(T tabData) where T : IData
    {
        Console.WriteLine("setData type " + typeof(T) + " " + tabData.Title);
    }
}

public interface IData
{
    string Title { get; set; }
}
public class DataA : IData
{
    public string Title { get; set; }
    public string PicUrl;
}

public class DataB : IData
{
    public string Title { get; set; }
}

public class MainContainer : MonoBehaviour
{
    public ContainerElementCtrl containerElement;

    public void setDataInUI<T>(T tabsData) where T : IData
    {
        containerElement.SetData(tabsData);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...