如何判断类是否实现了某接口

场景:

        有一个公共变量(PublicInstance)引用了多个类产生的实例。这些类中的一部分实现了接口(IEnterDataDisplay),实现此接口的类需要执行接口中的方法,否则不需要。如何判断当前实例是否实现了接口(IEnterDataDisplay)?

namespace YKP.UI.JxMgr
{
    interface IEnterDataDisplay
    {
        void Display();
    }
}

方法一:as返回对同一个对象的一个非null引用,不会抛出异常。强制类型转换会抛出异常。


    class Class1
    {
        public void doFun()
        {
            IEnterDataDisplay ie = Instance as IEnterDataDisplay;
            if (ie != null)
            {//实现了
                ie.Display();
            }
        }
    }

方法二:is检查一个对象是否兼任与指定的类型,并返回一个Boolean值:true或false。is操作符永远不会抛出异常!


        public void doFun()
        {
            if (Instance is IEnterDataDisplay)
            {//实现了
                Instance.Display();
            }
        }

方法三:

        public void doFun()
        {
            if (Instance.GetType().GetInterface("IEnterDataDisplay") != null)
            {//实现了
                Instance.Display();
            }
        }

https://www.cnblogs.com/studydp/p/9045860.html

https://www.cnblogs.com/FengTime/p/12461798.html?ivk_sa=1024320u

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供两个C语言接口示例,用于设置某消息发送间隔: 1. 使用结构体保存消息发送间隔 ```c typedef struct { int msg_type; int interval; } MsgInterval; // 设置某消息的发送间隔 void set_msg_interval(MsgInterval* intervals, int size, int msg_type, int interval) { for (int i = 0; i < size; i++) { if (intervals[i].msg_type == msg_type) { intervals[i].interval = interval; return; } } // 如果该消息的间隔还未设置,则新增一项 intervals[size].msg_type = msg_type; intervals[size].interval = interval; } // 获取某消息的发送间隔 int get_msg_interval(MsgInterval* intervals, int size, int msg_type) { for (int i = 0; i < size; i++) { if (intervals[i].msg_type == msg_type) { return intervals[i].interval; } } // 如果该消息的间隔还未设置,则返回默认值 return DEFAULT_INTERVAL; } ``` 2. 使用哈希表保存消息发送间隔 ```c #define TABLE_SIZE 100 // 哈希表节点 typedef struct Node { int msg_type; int interval; struct Node* next; } Node; // 哈希表 typedef struct { Node* table[TABLE_SIZE]; } MsgIntervalTable; // 计算哈希值 unsigned int hash(unsigned int x) { return (x * 2654435761) % TABLE_SIZE; } // 设置某消息的发送间隔 void set_msg_interval(MsgIntervalTable* table, int msg_type, int interval) { unsigned int index = hash(msg_type); Node* node = table->table[index]; while (node) { if (node->msg_type == msg_type) { node->interval = interval; return; } node = node->next; } // 如果该消息的间隔还未设置,则新增一项 Node* new_node = (Node*)malloc(sizeof(Node)); new_node->msg_type = msg_type; new_node->interval = interval; new_node->next = table->table[index]; table->table[index] = new_node; } // 获取某消息的发送间隔 int get_msg_interval(MsgIntervalTable* table, int msg_type) { unsigned int index = hash(msg_type); Node* node = table->table[index]; while (node) { if (node->msg_type == msg_type) { return node->interval; } node = node->next; } // 如果该消息的间隔还未设置,则返回默认值 return DEFAULT_INTERVAL; } ``` 这两个接口都可以实现设置某消息的发送间隔,具体选择哪个接口取决于项目的具体情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值