C#接口一些有意思的东西

复制代码
using System;
using UnityEngine;
public interface IParent<T>
{
   
    void Print()
    {
        GetDefaultAction().Invoke();
    }


    Action GetDefaultAction();
}

public interface ISonA : IParent<int>
{
   Action IParent<int>.GetDefaultAction(){
       return () =>Debug.Log("ISonA");
   }
    // new void  Print(){
    //     Debug.Log("A");
    // }
}

public interface ISonB : IParent<float>
{
    Action IParent<float>.GetDefaultAction()
    {
        return () => Debug.Log("ISonB");
    }

    // new void  Print(){
    //     Debug.Log("B");
    // }
}

public abstract class Child :MonoBehaviour, ISonB
{
    protected virtual void Start() {
        ((ISonB)this).Print();
    }

}

public class Test : Child,ISonA
{
    
    protected override void Start()
    {
         base.Start();
        
        ((ISonA)this).Print();
}
}

打印结果:

复制代码
using System;
using UnityEngine;
public interface IParent<T>
{
   
    void Print()
    {
        GetDefaultAction().Invoke();
    }


    Action GetDefaultAction();
}

public interface ISonA : IParent<int>
{
   Action IParent<int>.GetDefaultAction(){
       return () =>Debug.Log("ISonA");
   }
    // new void  Print(){
    //     Debug.Log("A");
    // }
}

public interface ISonB : IParent<float>
{
    Action IParent<float>.GetDefaultAction()
    {
        return () => Debug.Log("ISonB");
    }

    // new void  Print(){
    //     Debug.Log("B");
    // }
}

public abstract class Child :MonoBehaviour
{
    protected virtual void Start() {
        ((ISonB)this).Print();
    }

}

public class Test : Child,ISonA, ISonB
{
    
    protected override void Start()
    {
        base.Start();
        ((ISonA)this).Print();
}
}

打印结果:

复制代码
using System;
using UnityEngine;
public interface IParent<T>
{
   
    void Print()
    {
        GetDefaultAction().Invoke();
    }


    Action GetDefaultAction();
}

public interface ISonA : IParent<int>
{
   Action IParent<int>.GetDefaultAction(){
       return () =>Debug.Log("ISonA");
   }
    // new void  Print(){
    //     Debug.Log("A");
    // }
}

public interface ISonB : IParent<float>
{
    Action IParent<float>.GetDefaultAction()
    {
        return () => Debug.Log("ISonB");
    }

    // new void  Print(){
    //     Debug.Log("B");
    // }
}

public abstract class Child :MonoBehaviour
{
    protected virtual void Start() {
        ((ISonB)this).GetDefaultAction().Invoke();
    }

}

public class Test : Child,ISonA, ISonB
{
    
    protected override void Start()
    {
        base.Start();
        ((ISonA)this).GetDefaultAction().Invoke();
}
}

打印结果:

复制代码
using System;
using UnityEngine;
public interface IParent<T>
{
   
    void Print()
    {
        GetDefaultAction().Invoke();
    }


    Action GetDefaultAction();
}

public interface ISonA : IParent<int>
{
   Action IParent<int>.GetDefaultAction(){
       return () =>Debug.Log("ISonA");
   }
    // new void  Print(){
    //     Debug.Log("A");
    // }
}

public interface ISonB : IParent<float>
{
    Action IParent<float>.GetDefaultAction()
    {
        return () => Debug.Log("ISonB");
    }

    // new void  Print(){
    //     Debug.Log("B");
    // }
}

public abstract class Child :MonoBehaviour,ISonB
{
    protected virtual void Start() {
        ((ISonB)this).GetDefaultAction().Invoke();
    }

}

public class Test : Child,ISonA
{
    
    protected override void Start()
    {
        base.Start();
        ((ISonA)this).GetDefaultAction().Invoke();
}
}

打印结果:

复制代码
using System;
using UnityEngine;
public interface IParent<T>
{
   
    void Print()
    {
        GetDefaultAction().Invoke();
    }


    Action GetDefaultAction();
}

public interface ISonA : IParent<int>
{
   Action IParent<int>.GetDefaultAction(){
       return () =>Debug.Log("ISonA");
   }
    new void  Print(){
        Debug.Log("A");
    }
}

public interface ISonB : IParent<float>
{
    Action IParent<float>.GetDefaultAction()
    {
        return () => Debug.Log("ISonB");
    }

    new void  Print(){
        Debug.Log("B");
    }
}

public abstract class Child :MonoBehaviour,ISonB
{
    protected virtual void Start() {
        ((ISonB)this).Print();
    }

}

public class Test : Child,ISonA
{
    
    protected override void Start()
    {
        base.Start();
        ((ISonA)this).Print();
}
}

打印结果:

说明((ISonA)this)转成了最基础的接口

相关推荐
用户37215742613510 小时前
C# 提取 PDF 附件:包括文档附件和页面注释附件
c#
寂寞的船10 小时前
【Unity Bug挑战】第12期 Awaitable 二次 await 死锁之谜 —— 为什么同一个异步操作等两次就卡死?
unity·c#·游戏引擎·bug
huaqianzkh2 天前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#
用户3721574261353 天前
C# 实现 Excel 单元格保护:锁定公式并允许编辑指定区域
c#·ai编程·编程语言
公子小六3 天前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
三雷科技3 天前
第6章第4节:自定义分词器
开发语言·c#
zhanghaha13143 天前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
Coder_Shenshen3 天前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
寂寞的船4 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
1-1=04 天前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore