【发布时间】:2017-12-28 08:35:24
【问题描述】:
是否可以防止使用抽象类作为属性类型?
我有一个抽象基类在具有泛型类型的抽象类中继承,而后者又在具有定义类型的类中继承。是否可以用泛型类型“锁定”抽象类,因此不能将其用作其他类的属性?
这是我的情况的近似值。我想防止创建像doubleFoo2 这样的属性的可能性。 Foo<T> 应该只能在其他类中继承,不能直接作为类型使用。
由于我正在验证 PropertyType 的属性及其基本类型,这导致我犯了一个错误,我花了一段时间才找到。这是代码的测试:https://dotnetfiddle.net/OMHmGv
public abstract class FooBase
{
// Various generic properties and methods
}
public abstract class Foo<T> : FooBase
{
public Type ValueType { get { return typeof(T); } }
public abstract T Value { get; set; }
}
public class DoubleFoo : Foo<double>
{
public override double Value { get; set; }
}
public class FooHandler
{
public DoubleFoo doubleFoo1 { get; set; }
public Foo<double> doubleFoo2 { get; set; }
}
【问题讨论】:
-
是否可以用泛型类型“锁定”抽象类,因此不能将其用作其他类的属性? 不,不可能。你为什么关心这样的事情?你想达到什么目的?
-
您可能需要
internal或private? -
@CodingYoshi 正如我所写:“由于我正在验证属性的 PropertyType 及其基本类型,这导致我犯了一个错误,我花了一段时间才找到。” IE。我想避免再次犯错。
-
您想要做的事情在 C# 中是不可能的。 Access modifiers 是限制类型曝光的唯一工具。在我看来,你是在浪费时间在这上面。请说明您的目标是什么。
-
你犯了什么错误?
标签: c# class inheritance abstract