Tag: 属性

将抽象readonly属性覆盖为读/写属性

我想只强制从基本抽象类在给定属性上实现C#getter。 如果需要,派生类可以为该属性提供一个setter,以供公共使用静态绑定类型。 给出以下抽象类: public abstract class Base { public abstract int Property { get; } } 如果我想要一个也实现了setter的派生类,我可以天真地尝试: public class Derived : Base { public override int Property { get { return field; } set { field = value; } // Error : Nothing to override. } private int field; } 但是后来我遇到语法错误,因为我试图覆盖不存在的setter。 我尝试了其他一些方法,例如声明基本setter私有等等,我仍然偶然发现所有类型的错误阻止我这样做。 必须有办法做到这一点,因为它不会破坏任何基类合同。 顺便说一句,它可以用接口完成,但我真的需要默认实现。 我经常偶然发现这种情况,我想知道是否有隐藏的C#语法技巧,否则我将使用它并实现手动SetProperty()方法。

向接口添加属性是否会阻止在派生类型中创建私有/受保护的“set”?

编辑: 事实certificate我错过了一些明显的东西,但是我会打开这个问题以防其他人犯同样明显的错误。 感谢那些指出来的人 见底部的解释。 是否可以在覆盖接口属性的属性上设置非公共集? 也许我有一个愚蠢的时刻,但在我看来,在界面中定义一个属性隐含地要求没有派生类可以为所述属性提供任何非公共集。 例: interface IField { bool IsValid { get; } } …并且由于界面属性可能没有辅助function修饰符意味着: class Field : IField { public override bool IsValid { get; protected set; } } ……尽管它在概念上符合接口要求,但是不可能实现。 IMO对于可能通过非公共属性进行的封装具有很大的负面影响,并且阻止了许多常见的使用模式。 我知道你可以创建一个非公共的SetIsValid成员来修改一个公共的后备存储,但这会产生一个不一致的模式,并添加原本不需要的代码噪声。 我错过了什么吗? 编辑:是的我错过了什么 我正在修改其他人的代码,只是意识到我正在挣扎的类实现了接口并从基类派生。 我是c#的新手,这就是导致覆盖混乱的原因。 实际的class级看起来像: class Field : IField, BaseField { public override bool IsValid { get; protected set; } […]

如何使用reflection来调用具有特定自定义属性的所有方法?

我有一个有很多方法的课。 其中一些方法由自定义属性标记。 我想立即调用所有这些方法。 我如何使用reflection来查找该类中包含此属性的所有方法的列表?

将helpstring属性应用于通过COM接口公开的C#属性

我目前正在开发一个库,该库将暴露给COM,用于正在升级的旧项目中。 我正在创建要公开的接口,并且它们具有long,int等类型的属性。 使用DescriptionAttribute,我可以获得.tlb中为接口,类和方法生成的帮助字符串,但由于某种原因,它似乎不想用于属性。 反正有没有在TLB输出中为属性生成一个帮助字符串?

我在属性设置器中进入无限循环

public int Position { get { if (Session[“Position”] != null) { Position = Convert.ToInt32(Session[“Position”]); } else { Position = 5; } return Position; } set { Position = value; } } 我的程序调用get并进入if循环,然后无限运行到set代码中

方括号之间的文本含义

我见过很多使用[]的C#程序,例如[STAThread] ,然后代码如下。 另一个经典的例子是[DLLImport] 。 我知道STAThread意思,但我的问题是方括号的意义是什么,基本上它们告诉编译器的是什么?

迭代类属性

我正在尝试迭代Color类的Color属性。 不幸的是它不在一个集合中,所以它只是一个带有一堆静态属性的类。 有没有人知道它是否可以迭代一个类的属性是静态的还是基于对象的?

正确使用C#属性

private List _dates; public List Dates { get { return _dates; } set { _dates = value; } } 要么 public List Dates { get; set; } 我一直用前者,是不正确还是不好的做法? 我从未想过我可以使用第二个选项。 我喜欢让我的封装变量以下划线开头,所以我可以将它们与方法参数区分开来。 而我总是那样做。 是否有可能使用第一个选项会导致额外的List对象被实例化,然后整个_dates被替换为value ,还是比它更智能? 此外,哪个是行业中最突出的还是完全主观的?

C#reflection:在成员字段上查找属性

我可能会错误地问这个问题,但是可以/如何在一个类中查找字段…例如…… public class HtmlPart { public void Render() { //this.GetType().GetCustomAttributes(typeof(OptionalAttribute), false); } } public class HtmlForm { private HtmlPart _FirstPart = new HtmlPart(); [Optional] //<– how do I find that? private HtmlPart _SecondPart = new HtmlPart(); } 或者我可能只是错误地执行此操作…如何调用方法然后检查应用于自身的属性? 另外,为了这个问题 – 我很好奇是否有可能在不知道/访问父类的情况下找到属性信息!

Java的“属性”是否与C#中的属性相同?

在C#中,您可以使用属性使数据字段可公开访问(允许用户直接访问它),同时保留在这些直接访问的字段上执行数据validation的function。 Java有类似的东西吗? 对于Instance,假设存在一个带有以下实现的C#类(见下文): public class newInt{ public newInt(){…} public int x{ get{ return this.x } set{ this.x = isValid(value) } } } private static int isValid(int value){…} 类中的这个定义允许用户在从中检索值并为其赋值时“自然地”使用数据字段“x”。 以下是它将如何在主要使用。 public class Test{ public static void main(String[] args){ newInt a = new newInt(); ax = 50; int b = ax; } } 问题是…… java也可以这样做吗? 如果是这样,它叫什么?