C# 具有接口和类的类型参数上的多个约束
我有void addtenty实体,其中tenty:class,isSpecificEntity; 我只想使用特定接口的类 这有什么意义? 我可以使用void addtenty实体,其中tenty:isSpecificEntity 但我不想实现结构。我只是想使用一些接口类 对。我可以取消课程。但是如何不实现结构呢?在您的示例中,实际实现的类是,它使传递值类型变得更加困难,但并非不可能 下面是一个例子。使用类约束时,isSpecificEntity需要存在。如果没有类约束,isSpecificEntity就不需要存在 一个常见的误解是类不允许传入结构。事实并非如此。它基本上意味着这种类型必须是类或接口 如果确实必须禁止值类型,则需要在方法内检查entity.GetType.IsValueType的值,即在运行时C# 具有接口和类的类型参数上的多个约束,c#,C#,我有void addtenty实体,其中tenty:class,isSpecificEntity; 我只想使用特定接口的类 这有什么意义? 我可以使用void addtenty实体,其中tenty:isSpecificEntity 但我不想实现结构。我只是想使用一些接口类 对。我可以取消课程。但是如何不实现结构呢?在您的示例中,实际实现的类是,它使传递值类型变得更加困难,但并非不可能 下面是一个例子。使用类约束时,isSpecificEntity需要存在。如果没有类约束,isSpecificEn
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传递它;不管怎样,它都会起作用的!谢谢