gpt4 book ai didi

c# - 类型限制

转载 作者:太空狗 更新时间:2023-10-29 22:56:02 25 4
gpt4 key购买 nike

我们可以将类的 Type 属性限制为特定类型吗?

例如:

public interface IEntity { }

public class Entity : IEntity {}

public class NonEntity{}

class SampleControl {
public Type EntityType{get;set;}
}

假设 sampleControl 是 UI 类(可能是 Control,Form,..)它的 EntityType 属性的值应该只接受 typeof(Entity) 的值,而不是 typeof(NonEntity) 我们如何限制用户在设计时给出特定类型(因为样本是我们可以在设计时设置其属性的控件或表单),这在 C# .net 中是否可行

我们如何使用 C# 3.0 实现这一目标?

在我上面的类(class)中,我需要 Type 属性,它必须是 IEntity 之一。

最佳答案

这可能是泛型有帮助的场景。使整个类泛化是可能的,但不幸的是,设计者讨厌泛型;不要这样做,但是:

class SampleControl<T> where T : IEntity { ... }

现在SampleControl<Entity>作品,和SampleControl<NonEntity>没有。

同样,如果在设计时没有必要,你可以有类似的东西:

public Type EntityType {get;private set;}
public void SetEntityType<T>() where T : IEntity {
EntityType = typeof(T);
}

但这对设计者没有帮助。您可能只需要使用验证:

private Type entityType;
public Type EntityType {
get {return entityType;}
set {
if(!typeof(IEntity).IsAssignableFrom(value)) {
throw new ArgumentException("EntityType must implement IEntity");
}
entityType = value;
}
}

关于c# - 类型限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2025859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com