我正在将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; }
}
但是正如新建议所暗示的:这是一个不相关的属性,不需要具有相同的类型.