相关疑难解决方法(0)

字段和属性之间有什么区别?

在C#中,是什么使字段与属性不同,何时应该使用字段而不是属性?

c# field properties

1032
推荐指数
17
解决办法
42万
查看次数

我应该使用公共属性和私有字段或公共字段来获取数据吗?

在我看过的大部分代码中(在SO上,我都会在我自己的代码中使用codeproject.com),我已经看到为一个类包含的每个私有字段创建公共属性,即使它们是最多的基本类型get; set;:

private int myInt;
public int MyInt 
{
     get { return myInt; }
     set { myInt = value }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:这与以下方面有何不同:

public int MyInt;
Run Code Online (Sandbox Code Playgroud)

如果我们应该使用属性而不是公共字段,为什么我们应该在这种特定情况下使用它们呢?(我不是在讨论更复杂的例子,其中getter和setter实际上做了一些特殊的事情,或者只有一个get或set(只读/写)而不是只返回/设置私有字段的值).它似乎没有添加任何额外的封装,只在IntelliSense中提供一个漂亮的图标,并放在类图中的特殊部分!

.net c# coding-style properties

55
推荐指数
4
解决办法
3万
查看次数

有没有琐碎的财产保存你的培根?

那里有很多建议你不应该公开地公开你的字段,而是使用普通的属性.我一遍又一遍地看到它.

我理解这些论点,但在大多数情况下我认为这不是一个好建议.

有没有人有一个真正重要的时间的例子?在写一个琐碎的财产时,将来可能会有一些重要的事情(或者当没有使用它时会让他们陷入真正的麻烦)?

编辑:DataBinding参数是正确的,但不是很有趣.DataBinding代码中的一个错误是它不接受公共字段.因此,我们必须编写属性来解决该bug,而不是因为属性是明智的类设计选择.

编辑:要清楚,我正在寻找现实世界的例子,而不是理论.真正重要的时刻.

编辑:在setter上设置断点的能力似乎很有价值.为调试器设计我的代码是不幸的:我宁愿调试器变得更聪明,但考虑到我们的调试器,我将采用这种能力.好东西.

.net c#

19
推荐指数
5
解决办法
2679
查看次数

C#3.0中自动属性和公共字段之间的区别

我无法理解为什么C#3.0中存在自动实现的属性语言功能.

你说的时候有什么不同

public string FirstName;
Run Code Online (Sandbox Code Playgroud)

public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)

c# c#-3.0

17
推荐指数
3
解决办法
5854
查看次数

属性和自动实现

我在Outlook 2013的VSTO插件中使用.NET 4.5.我在完全掌握属性和访问器方面遇到了一些麻烦.我假设的自动实现的访问器就是你刚刚写的get; 组; 而不是得到{// code}等等也给我带来了麻烦.我有一本我在班上内部使用的词典.这是我的代码:

private Dictionary<string, string> clientDict { get; set; }
private Dictionary<string, string> clientHistoryDict { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后是:

clientDict = new Dictionary<string, string>();
clientHistoryDict = new Dictionary<string, string>();
Run Code Online (Sandbox Code Playgroud)

我在稍后的代码中使用与同一类中的属性相同的名称.

我从来没写过:

private Dictionary<string, string> _clientDict; // etc.
Run Code Online (Sandbox Code Playgroud)

创建我刚才直接使用属性的变量.

我尝试更改我的代码来执行此操作,我遇到了一些问题,并意识到我对属性的理解有点混乱.

以下是我需要澄清的几个问题,我似乎无法找到正确的答案.

首先,有没有理由使用私有财产?我的字典永远不会在类之外或任何派生类中访问,所以是否有理由使用属性?我不使用任何特殊的验证或setter中的任何东西或类似的东西.

其次,当我尝试更改我的代码以使用变量,然后通过像典型属性示例那样的属性访问它们时,我遇到了问题.我找到了一个getter设置的示例return _clientDict,但是setter只是set; 它给了我错误:我必须设置一个body,因为它不是抽象的或部分的.为什么在这种情况下它不会为我自动实现setter?

最后,当我在声明它的同一个类中的属性上调用new时,使用属性和相同类型的普通变量之间的区别是什么?在这种情况下,属性是否与变量完全不同?当应该使用私有变量完成时,以这种方式使用属性是不好的做法吗?

这些可能是一些误入歧途的问题,但我找不到任何其他有信息帮助我理解这些区别的地方.我一直在玩房产试图找出所有这些,但我可以使用这样的帮助.

c# field properties

10
推荐指数
1
解决办法
491
查看次数

了解获取和设置访问者

我是新手,我正在努力学习C#的基础知识.这可能听起来很微不足道,可能是愚蠢的,但这是一个疑问.在浏览应用程序的一个源代码时,我在一个类中看到了一段代码

private string fname;
public string FirstName
{
    get
    {
       return fname
    }
    set
    {
       fname = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我这是什么意思.我知道当我们声明一个fname使用别名访问的类时FirstName.如果它出于某种安全目的那么呢?

c# asp.net

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×6

properties ×3

.net ×2

field ×2

asp.net ×1

c#-3.0 ×1

coding-style ×1