Tag: 属性

通过wcf服务发送带有自定义属性的对象

我刚开始学习WCF,因为我需要它来完成学校作业。 但是当我尝试发送带有一些自定义属性的对象时,我遇到了问题。 对象是: [DataContract] public class Person { [DataMember] [Searchable(“ID”)] public virtual String ID { get; set; } [DataMember] [Searchable(“LastName”)] public virtual String LastName { get; set; } [DataMember] [Searchable(“FirstName”)] public virtual String FirstName { get; set; } } 自定义属性是: [DataContract] [AttributeUsage(AttributeTargets.Property)] public class Searchable:Attribute { public Searchable(String PropertyName) { this.PropertyName = PropertyName; } [DataMember] […]

自定义CodeAccessSecurityAttribute

我创建了以下属性: [Serializable] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] public class OperationPermissionAttribute : CodeAccessSecurityAttribute { private static PrincipalPermission _revoke = new PrincipalPermission(PermissionState.None); private static PrincipalPermission _allow = new PrincipalPermission(PermissionState.Unrestricted); private string _role; private string _task; private string _operation; public OperationPermissionAttribute(SecurityAction action, string role, string task, string operation) : base(action) { _role = role; […]

即使browsable属性设置为false,WPF工具包DataGrid也会显示字段

您有一个可观察的集合,我使用DataGrid的itemsource属性绑定到DataGrid。 集合中类的所有属性都在DataGrid中正确显示。 现在,我想使用类中的browsable属性[Browsable(false)]将一些字段隐藏到DataGrid。 它在winforms中运行良好,但似乎无法在WPF中运行。 有人知道为什么吗? 我可以稍后隐藏列,但我不想以这种方式丢失性能。 还有其他解决方案吗? 谢谢。

使用C#中的典型get set属性…带参数

我想在C#中做同样的事情。 有没有在C#中使用参数的属性,就像我在这个VB.NET示例中使用参数’Key’一样? Private Shared m_Dictionary As IDictionary(Of String, Object) = New Dictionary(Of String, Object) Public Shared Property DictionaryElement(ByVal Key As String) As Object Get If m_Dictionary.ContainsKey(Key) Then Return m_Dictionary(Key) Else Return [String].Empty End If End Get Set(ByVal value As Object) If m_Dictionary.ContainsKey(Key) Then m_Dictionary(Key) = value Else m_Dictionary.Add(Key, value) End If End Set End Property […]

属性构造函数的默认值?

我收到这个错误, 错误CS0182:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式 当我尝试写这样的东西时 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] public class UrlAttribute : Attribute { public UrlAttribute(string pattern, string name=null) { // … 它甚至没有显示行号,但是当我取出=null位时它会消失。 实际上,错误只发生在我提供默认值并依赖它(即我省略它)时 [Url(“/index”)] 我很想知道为什么会这样? “null”如何不是常量表达式?

在.NET应用程序中使用PCL时,如果被调用的类包含方法,则为TypeLoadException

我正在将现有的.NET类库改编为可移植类库。 我使用配置文件78(.NET 4.5,Windows Store 8,Windows Phone 8)支持配置文件158(也针对Silverlight 5),因为我希望能够编译原始库的unsafe代码。 .NET库包含很多标记为[Serializable]的类,所以我实现了一个包含虚拟SerializableAttribute实现的支持PCL库: public class SerializableAttribute : Attribute { } 它是从主PCL库中引用的。 为了充分利用.NET应用程序中的主PCL库,同时避免类型名称冲突,我还准备了一个.NET支持库(与PCL支持库具有相同的强名称),包含类型转发声明: [assembly: TypeForwardedTo(SerializableAttribute)] 并在我的.NET应用程序中显式引用.NET支持库而不是PCL库。 在准备好所有这些并且能够成功编译PCL适配库之后,我重新使用原始.NET库中的unit testing,现在引用PCL主库和.NET支持库。 这通常非常有效,但对于包含[Serializable]类和[OnDeserialized]修饰方法的unit testing: [Serializable] public class Foo { [OnDeserialized] private void DoSomething(StreamingContext context) { } } 我得到以下TypeLoadException : 在程序集“MyPclAssembly”中键入“Foo”的方法为“DoSomething”,其序列化属性的签名不正确。 (可以注意到OnDeserializedAttribute包含在可移植子集中,可能是因为它也在[DataContract]序列化中被识别。) 在原始.NET库上运行unit testing时,我没有获得exception。 我仔细分析了Foo类中的方法签名,它完全符合这些(de-)序列化辅助方法应该具有的签名,参见例如此处 。 我也尝试将[OnDeserialized]方法的可见性更改为internal和public ,但无济于事。 使用PCL库时出现此exception的原因是什么,我该怎么做才能避免它? 编辑我已经检查了PCL库的IL代码和[OnDeserialized]方法的.NET库,我看不出任何相关的区别: PCL .method private hidebysig instance […]

为什么VB.NET 9没有像C#3这样的自动属性?

有一个很好的小function,可以更快地编写自动属性等代码非常适合VB.NET的口头禅吗? 像这样的东西会很完美: Public Property FirstName() As String Get Set End Property 更新: VB.NET 10(随Visual Studio 2010和.NET 4.0一起提供)将具有自动属性。 这是一个链接,显示有关该function的一些信息: http : //geekswithblogs.net/DarrenFieldhouse/archive/2008/12/01/new-features-in-vb.net-10-.net-4.0.aspx 在VB.NET 10中,自动属性将定义如下: Public Property CustomerID As Integer

代码与自动实现的属性签订合同

有没有办法将合同放在.NET中自动实现的属性上? (如果答案是’是’怎么办?)? (我假设使用DevLabs的.NET代码合同)

属性名称与类名匹配时要执行的操作

在我们的C#代码中,我们有一个名为Project的类。 我们的基础BusinessObject类(所有业务对象都inheritance自)定义了一个属性: public Project Project { get; set; } 只要我们保持在C#代码库中,这通常不是问题。 但是,这些业务对象类通过网络在Web服务中公开。 某些消费语言(例如Flex的动作脚本)无法处理具有与其类同名的属性。 这个命名冲突发生在我们代码中的所有地方。 有时,更改属性或类的名称很容易。 有时它真的很难。 我们绞尽脑汁,无法想出一个很好的标准方法来处理这个问题。 可以将Project类重命名为ProjectType或ProjectInfo,但这很丑陋并且会破坏我们所有的消费者现有代码。 我们可以保留类型名称相同并将属性的名称更改为ProjectInfo,但这会导致同样的问题。 有没有人对这种情况有任何指导或最佳做法? 编辑: 回应一些建议: 方法不会通过电线暴露,因此我们不能使用方法。 我更喜欢标准的命名约定,它也符合微软自己的命名标准。 可以选择为Flex公开不同的合同。 但是,我们正在使用Weborb for Flex interop。 Weborb使用reflection来精确匹配属性名称,而不是使用XML或SOAP序列化。 如果有人了解有关Weborb的自定义序列化的更多信息,那将会很有帮助。 编辑#2: 作为参考,我们最终将属性重命名为: public Project ProjectInfo { get; set; }

在覆盖中向属性添加setter

为什么在实现接口时允许更改属性中getter或setter的可见性和存在? interface IFoo { string Bar { get; } } class RealFoo : IFoo { public RealFoo(string bar) { this.Bar = bar; } public string Bar { get; private set; } } class StubFoo : IFoo { public string Bar { get; set; } } ……在实现抽象类时,做同样的事情并不合法吗? abstract class AbstractFoo : IFoo { public abstract string […]