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