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)转成了最基础的接口

相关推荐
hez20103 天前
在 .NET 上构建超大托管数组
c#·.net·.net core·gc·clr
雨落倾城夏未凉8 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
唐青枫9 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
唐青枫10 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m62510 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net
用户917215619021110 天前
C# 通信协议增量解析:用状态机处理半包和粘包
c#
小码编匠11 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net
唐青枫13 天前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech13 天前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf15 天前
C#摸鱼实录——IoC与DI案例详解
c#