我试着在网站上搜索这个问题,但是没有找到答案。我查看了有关自动实现属性的MSDN文档,提供的示例仅是类中的public字段。我的示例类:
public class Area
{
private bool enabled { get; set; }
}
每当我试图从另一个类访问这个类的enabled字段时,我都会得到一个错误,"Area.enabled由于其保护级别而无法访问“。我不明白为什么它是不可访问的,因为自动实现的属性是写的,即使我的字段是私有的,我也有get和set
这个问题出现在的评论中。无法拥有只读属性是使用字段而不是属性的一个潜在原因。
例如:
class Rectangle
{
private readonly int _width;
private readonly int _height;
public Rectangle(int width, int height)
{
_width = width;
_height = height;
}
public int Width { get { return _width; } }
public int Height { get
是否存在需要公共只读字段vs.a获取的自动实现属性的情况?
public class Foo
{
public readonly string Hello;
public string Hello2 { get; }
}
两者都只能在构造函数期间设置,并且都提供类之外的只读访问。我有点累了,所以我可能遗漏了什么。
首先,为了澄清和避免不必要的重复标记,这个问题不是的副本,也不是的副本,也不是我已经搜索过的其他内容。为什么?他们都谈到了具有经典C#“属性”的公共字段或私有字段。
我的问题是为什么我要写这样的东西(公共属性)
class myClass{
public int AValue{get; set;}
}
当我可以代替(私有字段而不涉及任何属性)(只是典型的旧C++风格的写作方式)
class myClass{
private int aValue;
public int getValue{ return aValue;}
public void setValue(int value){ aVa
我正在处理应用程序,它有一个名为My.java的实体,它是从另一个具有编辑字段的实体扩展而来的。此字段将使用当前时间戳对每次更新进行更新。
我使用的是单表继承策略。
我正在使用jpa/eclipse链接作为持久的提供者。
编辑后的字段使用当前时间戳进行更新,即使没有调用out setter方法,我的java代码中也没有其他引用更改此已编辑字段的值。
调试时,我可以看到update QL语句,用于编辑字段更新。
我真的很想知道为什么/它是如何值更新的,它有可能通过外部setter调用吗?
下面是映射的超类:
@MappedSuperclass
public abstract class S
我一直在编写这样的类:
public class ReportViewModel
{
public string Status;
public string DataSource;
public String DataStore { get; set; }
public PageMeta PageMeta { get; set; }
public ICollection<Question> List { get; set; }
}
请注意,除了前两个字段之外,大多数字段都使用{ ge
有人能解释一下使用自动实现的属性c#背后的想法吗?
公共类客户{ public int ID { get;set;}公共字符串名称{ get;set;}
我得到了将属性用于私有字段的动机,因此我们可以确定如何访问私有字段。但在这里-这就像从一开始就把这个领域定义为公开的。不是吗?
在将字段定义为"public const“还是将其定义为具有get-only属性之间有什么区别?
在这个例子中,Foo.Something和Bar.Something之间有什么有效的区别吗?
class Foo
{
public string Something;
}
class Bar
{
public string Something{get; set;}
}
class Program
{
static void Main(string[] args)
{
var MyFoo = new Foo();
MyFoo.Something = "Hello: foo";
System.Con
我想这样做:
public Name
{
get;
set
{
dosomething();
??? = value
}
}
是否可以使用自动生成的私有字段?
或者我必须这样实现它:
private string name;
public string Name
{
get
{
return name;
}
set
{
dosomething();
name = value
}
}
我正在做一个带有一些验证规则的php表单。
如果某些需要填写的字段留空,表单将报告错误消息并要求用户填写该字段。
该表单当前保留$_POST数据的值,以便在发生错误时保留字段中的数据。
我遇到了两个字段(下拉列表)的问题,这两个字段是用数据库中的数据填充的。如果我填写了这些字段,但其他地方有错误,表单将显示下拉列表中的值,但当我更正错误并尝试提交表单时,它告诉我下拉列表字段为空。
下面是它们的代码
<! Drop Down Menu to get student names from database !>
<SELECT NAME=studentName >
<
假设你在一个类中有一个字段_items。您可以在声明时初始化它:
class C
{
IList<string> _items=new List<string>();
}
现在,我想将此字段转换为自动生成的属性,但初始化现在无效:
class C
{
public IList<string> Items=new List<string>(); {get; set;} // Invalid
}
所以,我必须这样做:
class C
{
public IList<string> Items {get; set;}
pub
注意:这是我刚开始C#的时候发布的。有了2014年的知识,我可以真正地说,汽车属性是C#语言所经历的最好的事情之一。
我习惯于使用私有和公共字段在C#中创建我的属性:
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
现在,使用 3.0,我们获得了自动属性:
public string Title { get; set; }
我知道这更多是一个哲学/主观的问题,但是除了为每个字段节省5行代码之外,还有什么理由使用这些自动属性吗?我个人的抱怨是,
我见过很多示例代码都是用这样的代码编写的(请原谅这有多么糟糕):
public class Test
{
public object Thingy { get; private set; }
}
不幸的是,这些例子从来没有真正解释为什么' set‘被设置为私有。所以,我想知道是否有一个好的,常见的例子,可以向我说明为什么要使用这样的东西。
我有点明白了-除了设置该字段之外,还可以运行该属性来处理一些额外的逻辑。我只是对如何调用它感到困惑,以及为什么要使用这种方法而不是通用的setter方法。
有没有一种方法可以在C#中这样做:
public class Class2 {
public string PropertyName1 { get
{
return this; //i mean "PropertyName1"
}
set {
this = value;
DoAdditionalFunction();
}
}
因为我需要在"set“中调用额外的函数,所以我需要一个额外的私有字段,比如
private string _propertyName1;
public string Pro
我主要来自Java世界。所以,C#属性看起来确实不错。
我知道在C# 3.0或更高版本中,我可以使用自动属性。我更喜欢它:)。
我的问题是关于一个(可能更老的)代码,在那里我可以看到以下内容:
private int age;
public int Age {
get { return age; }
set { age = value; }
}
为什么我需要私有字段年龄?我到底在藏什么?
编辑:
我完全理解getter和setter的需求。我提到过,我来自Java世界,一直在做这件事。
我确实理解C# 3.0或更高版本中的Automatic
我刚碰到一个理论问题。
以下代码是有效的,并进行编译:
public class Parent
{
public virtual object TestProperty { get; set; }
}
public class Child : Parent
{
private string _testValue = "Hello World!";
public override object TestProperty
{
get { return _testValue; }
}
}
public class Cons
在讨论自动生成的属性时,大多数示例都讨论“简单”的值类型,如字符串。但是,如果您想要访问在IL中自动生成的值类型的字段来备份“自动属性”,该怎么办?
编译器不允许这样做:“无法修改'Position‘的返回值,因为它不是一个变量”。我理解为什么我们不能修改这个返回值,但是我们如何访问这些字段呢?
假设我们有
class A
{
Vector2 Position { get; set; }
public void Foo()
{
Position.X = 10.0f; // Not allowed!
}
}
如何在类A中访问和设置V
这是工作代码
public class SomeViewModel
{
public DelegateCommand CommandA { get; }
public DelegateCommand CommandB { get; }
public bool SomeProperty { get; set; }
// stupid constructor
public SomeViewModel()
{
CommandA = new DelegateCommand(OnCommandA);
Co
我使用的是实体框架和数据库优先的方法。
我已经使用分部类成功地添加了自定义方法,但是我发现,如果我添加了一个自定义字段,那么当下一次从DataContext中拉出我的实体时,它将不会持久化(在此期间,实体不会提交到数据库)。我需要使用此字段进行处理,但我不需要或不希望它存储在我的数据库中。
public partial class MyEntity
{
public decimal MyCustomField;
}
为什么会这样呢?我怎么才能绕过它呢?
谢谢
一方面,我知道Properties的明智用法是有一个支持字段,如下面的示例所示:
private int m_Capacity;
public int Capacity
{
get { return m_Capacity > 0 ? m_Capacity : -666; }
set { m_Capacity = value; }
}
另一方面,与丢弃字段并仅将属性用于所有用途相比,使用上面的示例有什么好处,如以下示例所示:
public int Capacity
{
get { return
我一直在尝试重置我的数据库,并找出为什么会发生这种情况,但由于某种原因,我得到了这个错误:
IntegrityError: main_funding_rounds_investments.investment_id may not be NULL
我不知道为什么或者为什么自动id字段会为空?如果有人有想法,我将不胜感激!
当我用inspectdb检查db时,我得到了以下结果:
class MainFundingRoundsInvestments(models.Model):
id = models.IntegerField(primary_key=True)
funding_r
非常简单的问题..。如何正确初始化结构上的私有支持字段?我得到一个编译器错误:
在将控件返回给调用方之前,必须完全分配自动实现的属性“RecTangle.Y”的后备字段。考虑从构造函数初始化器调用默认构造函数。
这是源代码。
public struct Rectangle
{
public Rectangle(int x, int y, int width, int height)
{
X = x;
Y = y;
Width = width;
Height = height;
}
可能重复:
人们似乎执迷不悟地坚持使用公共属性而不是领域,但为什么它在简单属性的情况下如此重要呢?
最近怎么样?
public int Foo { get; set; }
如此不可思议的不同
public int Foo;
从我的头上看,我几乎没有想到两者之间的实际差别:
使用反射访问成员的difference)The (很少的,也是最合适的反射算法将考虑到第二个条目)允许您使用字段作为引用和输出参数的有效参数,这似乎是使用字段versionFields不工作在远程处理中的优势(可能,我从未使用过远程处理,但我认为它们不会)?
除了这些非常罕见的情况之外,以后将Foo更改为计算属性将