编程语言
首页 > 编程语言> > C#中没有“属性类型”的属性

C#中没有“属性类型”的属性

作者:互联网

我正在将Delphi代码转换为C#.

我有一个复杂的类结构,其中类是所有子级的主要“主干”.

在Delphi中,我可以使用类型定义私有/受保护字段,并使用相同的类型定义该字段的属性,而不再在子类中编写该类型.

这是一个(和功能性)示例:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  Parent = class
  strict protected
    _myFirstField: Int64;
  public
    property MyFirstField: Int64    write _myFirstField;
  end;

  Child1 = class(Parent)
  public
    // Inherits the write/set behaviour..
    // And it doesn't need to define the type 'over and over' on all child classes.
    //
    // ******* Note MyFirstField here has not type.... ************
    property MyFirstField        read _myFirstField;  // Adding READ behaviour to the property.
  end;

var
  Child1Instance: Child1;
begin
    Child1Instance := Child1.Create;
    //Child1Instance.MyFirstField := 'An String';  <<-- Compilation error because type
    Child1Instance.MyFirstField := 11111;
    WriteLn(IntToStr(Child1Instance.MyFirstField));
    ReadLn;
end.

如您所见,我不需要一遍又一遍地定义属性类型.
如果将来需要更改var类型,则只能在父类中进行更改.

有没有办法在C#中获得相同的行为?

解决方法:

不,那里.公共API上的类型必须是显式的.唯一不明确的是使用var,它仅限于方法变量.

此外,您不能在C#中更改签名(在子类中添加公共获取器)-您将不得不重新声明它:

// base type 
protected string Foo {get;set;}

// derived type
new public string Foo {
    get { return base.Foo; }
    protected set { base.Foo = value; }
}

但是正如新建议所暗示的:这是一个不相关的属性,不需要具有相同的类型.

标签:accessor,c-4-0,types,c,delphi
来源: https://codeday.me/bug/20191102/1991548.html