C# 具有接口和类的类型参数上的多个约束

C# 具有接口和类的类型参数上的多个约束,c#,C#,我有void addtenty实体,其中tenty:class,isSpecificEntity; 我只想使用特定接口的类 这有什么意义? 我可以使用void addtenty实体,其中tenty:isSpecificEntity 但我不想实现结构。我只是想使用一些接口类 对。我可以取消课程。但是如何不实现结构呢?在您的示例中,实际实现的类是,它使传递值类型变得更加困难,但并非不可能 下面是一个例子。使用类约束时,isSpecificEntity需要存在。如果没有类约束,isSpecificEn

我有void addtenty实体,其中tenty:class,isSpecificEntity; 我只想使用特定接口的类

这有什么意义? 我可以使用void addtenty实体,其中tenty:isSpecificEntity

但我不想实现结构。我只是想使用一些接口类

对。我可以取消课程。但是如何不实现结构呢?

在您的示例中,实际实现的类是,它使传递值类型变得更加困难,但并非不可能

下面是一个例子。使用类约束时,isSpecificEntity需要存在。如果没有类约束,isSpecificEntity就不需要存在

一个常见的误解是类不允许传入结构。事实并非如此。它基本上意味着这种类型必须是类或接口

如果确实必须禁止值类型,则需要在方法内检查entity.GetType.IsValueType的值,即在运行时

using System;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    public class Bob
    {
        public void Add<TEntity>(TEntity entity) where TEntity : class, ISpecificEntity
        {
            Console.WriteLine(entity.GetType().IsValueType);
            Console.WriteLine("added");
        }
    }

    public interface ISpecificEntity
    {

    }

    public struct SpecificEntity : ISpecificEntity
    {

    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var entity = new SpecificEntity();

            var bob = new Bob();

            bob.Add((ISpecificEntity)entity);
        }
    }
}

其中T:classI我认为我可以删除类。对但是我不想要实现结构。例如。理论上我可以从接口继承struct。我不想在Add func中使用这个结构。这个方法说明了它需要什么。您需要实现接口。你为什么不想实施它?或者你是说你只想接受一个类而不是一个结构?如果是这样,您就不能在编译时这样做。这是否回答了您的问题?对的当我用'class'关键字将它改为2个参数时,它不能工作,但就像在另一个例子中一样,我可以简单地用bob.Addentity作为isSpecificEntity传递它;不管怎样,它都会起作用的!谢谢