Есть ли способ проверить, если тип <t>наследует от интерфейса, затем используйте t.InterfaceMethod () - PullRequest
0 голосов
/ 28 марта 2020

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

это базовый класс

public class Item 
{
    public string id;
    public string prefabID;
    public string title;
    public string description;
}

это производный класс

public class InteractableObject : Item, IEffectReceiver
{
    protected List<Stats> stats = new List<Stats>();
    protected HashSet<Effects> currentEffects;
    public List<Effects.EffectType> effectedBy = new List<Effects.EffectType>();
    public GameObject destroyedPrefab;
    private bool destructible = true;
    private bool destroyed = false;

это интерфейс

public interface IEffectReceiver 
{
    void CheckEffect(Effects effect);   
}

У меня есть класс ItemContainer, который содержит элементы, и поскольку базовый класс не наследует от IEffectReceiver, я могу сделать что-то вроде

if(Item i is IEffectReceiver)
{
    i.CheckEffect()
}

Я бы предпочел избегать наследования Item от IEffectReceiver, если бы мог помочь, поэтому, если есть какие-то обходные пути, вы можете бросить мне путь, который был бы потрясающим.

1 Ответ

1 голос
/ 28 марта 2020

C# обеспечивает синтаксис c сахара для получения IEffectReceiver, если тип на самом деле наследует его, например, так:

if(Item i is IEffectReceiver effectReceiver)
{
    effectReceiver.CheckEffect(_effect);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...