gpt4 book ai didi

c# - C# 中没有 'property type' 的属性

转载 作者:行者123 更新时间:2023-11-30 15:43:43 29 4
gpt4 key购买 nike

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

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

在 Delphi 中,我可以用一个类型定义私有(private)/ protected 字段,并为该字段定义相同类型的属性,而不再将类型写在子类中。

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

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# 中实现同样的行为吗?

最佳答案

不,有。公共(public) API 上的类型必须是显式的。唯一不显式的是 var,它仅限于方法变量。

此外,您不能更改 C# 中的签名(在子类中添加公共(public) getter)- 您必须重新声明它:

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

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

但正如 new 所暗示的那样:这是一个不相关的属性,不需要具有相同的类型。

关于c# - C# 中没有 'property type' 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6562678/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com