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

相关推荐
c#上位机11 小时前
halcon刚性变换(平移+旋转)——vector_to_rigid
图像处理·人工智能·计算机视觉·c#·halcon
Miss_SQ11 小时前
Webgl打包后删除StreamingAssets文件夹下多余资源
unity·c#·webgl
小猪快跑爱摄影11 小时前
【AutoCad 2025】【C#】零基础教程(二)——遍历 Entity 插件 =》 AutoCAD 核心对象层级结构
开发语言·c#·autocad
烛阴13 小时前
C# Dictionary 入门:用键值对告别低效遍历
前端·c#
Monkey_Xuan15 小时前
C#中的引用传递和值传递
unity·c#
CreasyChan15 小时前
C# LINQ 深度解析:优缺点与性能陷阱
unity·c#·游戏开发
精神小伙就是猛16 小时前
C# sealed密封 追本溯源
开发语言·c#
雨季66617 小时前
C 语言学习指南:从入门到实战的系统路径
c#
缺点内向21 小时前
如何在 C# 中创建、读取和更新 Excel 文档
c#·.net·excel
c#上位机21 小时前
halcon创建对象数组——concat_obj
图像处理·计算机视觉·c#·halcon