Tag: 属性

C#属性名称缩写

C#属性如何在其名称中具有“属性”(例如DataMemberAttribute ),但是在没有此后缀的情况下进行初始化? 例如: [DataMember] private int i;

如何通过Reflection获取字符串属性的值?

public class Foo { public string Bar {get; set;} } 如何通过reflection获得字符串属性Bar的值? 如果PropertyInfo类型是System.String,则以下代码将引发exception Foo f = new Foo(); f.Bar = “Jon Skeet is god.”; foreach(var property in f.GetType().GetProperties()) { object o = property.GetValue(f,null); //throws exception TargetParameterCountException for String type } 看来我的问题是该属性是一个索引器类型,带有System.String。 另外,如何判断该属性是否为索引器?

你能用“where”来要求c#中的属性吗?

我想创建一个只接受可序列化类的generics类,可以用where约束来完成吗? 我正在寻找的概念是这样的: public class MyClass where T : //[is serializable/has the serializable attribute]

P / Invoke 属性是否可选用于编组数组?

假设存在一个带有纯C接口的本机函数,如下所示,从本机DLL导出: // NativeDll.cpp extern “C” void __stdcall FillArray( int fillValue, int count, int* data) { // Assume parameters are OK… // Fill the array for (int i = 0; i < count; i++) { data[i] = fillValue; } } 以下P / Invoke工作正常(使用VS2010 SP1测试): [DllImport(“NativeDll.dll”, CallingConvention=CallingConvention.StdCall)] public static extern void FillArray( int fillValue, int count, [In, […]

In和Out属性如何在.NET中运行?

我一直在尝试使用以下代码跨AppDomain边界序列化数组: public int Read(byte[] buffer, int offset, int count) { return base.Read(buffer, offset, count); } 作为猜测,在注意到其他地方的属性后,我用[In]和[Out]属性标记了方法的参数,这似乎导致参数的行为就好像它们是通过引用传递的一样。 例如: public int Read([In, Out] byte[] buffer, int offset, int count) { return base.Read(buffer, offset, count); } 在添加属性之前,从方法跨AppDomain边界返回后, buffer变量的内容丢失了。 类( SslStream )inheritance自MarshalByRefObject但未标记为Serializable属性。 这是使参数按值传递的唯一方法吗? 在序列化类时,这些属性是否被.NET以某种方式识别? 它们真的会导致参数通过引用传递,还是只是复制了内容?

为什么我们需要C#中的属性

你能告诉我C#中属性的确切用法吗?我的意思是实用的解释 在我们的项目中,我们正在使用像 /// /// column order /// protected int m_order; /// /// Get/Set column order /// public int Order { get { return m_order; } set { m_order = value; } } /// /// constructor /// /// column name /// column width /// column order public ViewColumn(string name, int width, int order) { // // […]

获取和设置函数是否受C ++程序员的欢迎?

我原来是来自C#世界,我正在学习C ++。 我一直想知道在C ++中获取和设置函数。 在C#中,这些使用非常流行,而像Visual Studio这样的工具通过使它们变得非常容易和快速实现来促进使用。 但是,在C ++世界中似乎并非如此。 这是C#2.0代码: public class Foo { private string bar; public string Bar { get { return bar; } set { bar = value; } } } 或者,在C#3.0中: public class Foo { get; set; } 可能人们会说,那是什么意思呢? 为什么不创建一个公共字段,然后在需要时将其设置为属性; 老实说,我其实不确定。 我只是出于良好的做法,因为我已经看过很多次了。 现在因为我已经习惯了这样做,我觉得我应该把习惯延续到我的C ++代码,但这真的有必要吗? 我没有像C#那样频繁地完成它。 无论如何,这是我收集的C ++: class Foo { public: std::string […]

c#将class属性标记为脏

以下是定义对象状态的枚举的简单示例,以及显示此枚举实现的类。 public enum StatusEnum { Clean = 0, Dirty = 1, New = 2, Deleted = 3, Purged = 4 } public class Example_Class { private StatusEnum _Status = StatusEnum.New; private long _ID; private string _Name; public StatusEnum Status { get { return _Status; } set { _Status = value; } } public long ID […]

C#编译器是否足够智能以优化此代码?

请忽略此问题中的代码可读性。 在性能方面,如下所示代码应如下所示: int maxResults = criteria.MaxResults; if (maxResults > 0) { while (accounts.Count > maxResults) accounts.RemoveAt(maxResults); } 或者像这样: if (criteria.MaxResults > 0) { while (accounts.Count > criteria.MaxResults) accounts.RemoveAt(criteria.MaxResults); } ? 编辑: criteria是一个class , MaxResults是一个简单的整数属性(即public int MaxResults { get { return _maxResults; } } 。 C#编译器是否将MaxResults视为黑盒并每次评估它? 或者它是否足够聪明,可以发现我有3次调用同一个属性而没有在调用之间修改该属性? 如果MaxResults是一个领域怎么办? 优化法则之一是预先计算,所以我本能地像第一个列表那样编写这个代码,但我很好奇是否自动为我做了这种事情(再次,忽略代码可读性)。 (注意:我对听到“微优化”论证不感兴趣,这个论点可能在我发布的具体案例中有效。我只是想了解正在发生或未发生的事情的一些理论。)

您是否应该通过Property访问同一类中的变量?

如果您有一个获取并设置为实例变量的Property,那么通常您总是使用该类外部的Property来访问它。 我的问题是你是否也应该在课堂上这样做? 我总是使用该属性,如果有一个,即使在课堂上,但是想听到一些赞成和反对的论据,哪个是最正确的,为什么。 或者只是在项目中使用的编码标准问题?