在C#中,没有办法让类使用接口或抽象类定义字段?

时间:2011-08-10 19:23:39

标签: c# oop interface abstract-class

我想强制一组类来定义三个字段(字符串类型)。 在抽象类中,我得到的字段不能是抽象的,在接口中,我得到一个错误,说接口不能包含字段。 有没有办法做到这一点,或者我没有正确理解这一点?我宁愿不使用方法,因为出于一些奇怪的原因,括号使我恼火。

4 个答案:

答案 0 :(得分:6)

您可以使用以下属性:

interface MyInterface {
  string Prop1 { get; set; }
  string Prop2 { get; set; }
  string Prop3 { get; set; }
}

答案 1 :(得分:4)

接口或抽象成员强制派生类来提供代码 字段没有代码。

你应该使用一个属性,它可以像字段一样使用,但有代码。

答案 2 :(得分:4)

您可以使用“属性”代替字段:

// works similarly for Interfaces too
abstract class MyAbstractClass { public virtual string MyProperty1 { get; set; } }

class MyConcreteClass : MyAbstractClass {  }

然后,您可以从MyAbstractClass派生的任何实例访问MyProperty1:

MyAbstractClass obj1 = new MyConcreteClass; obj1.MyProperty1 =“abcd”;

答案 3 :(得分:2)

像其他人一样说,使用属性而不是字段,但你可以做一些像我在评论中解释的那样只读成员:

abstract public class Base
{
    abstract public string Foo { get; }
    abstract public string Bar { get; }
    abstract public string Baz { get; }
}

public class Derived : Base
{
    public override string Foo { get { return "foo"; } }
    public override string Bar { get { return "bar"; } }
    public override string Baz { get { return "baz"; } }
}

如果您希望以后可以修改字段,则必须使用automatic properties或为每个属性声明具体的后备字段和getter / setter对。