我被告知在自动实现的属性中不允许使用c#属性.真的吗?如果是这样的话?
编辑:我从一本关于LINQ的流行书中得到了这些信息,并且无法相信!编辑:参考Paul Kimmel释放的LINQ第34页,他说" 在自动实现的属性上不允许属性,所以如果你需要属性,请自行滚动 "
为C#公共属性设置默认值的最简单/直接的方法是什么?
//如何为此设置默认值?
public string MyProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)
请不要建议我使用私有属性并实现get/set公共属性.试图保持这种简洁,并且不想争论为什么那么好.谢谢.
当从拥有 auto 属性的类中调用初始化器时,为什么可以使用对象初始化器来设置私有 set auto 属性?我以两个类为例。
public class MyClass
{
public string myName { get; private set; }
public string myId { get; set; }
public static MyClass GetSampleObject()
{
MyClass mc = new MyClass
{
myName = "Whatever", // <- works
myId = "1234"
};
return mc;
}
}
public class MyOtherClass
{
public static MyClass GetSampleObject()
{
MyClass mc = new MyClass
{
myName = "Whatever", // <- fails
myId = "1234"
};
return mc;
}
}
Run Code Online (Sandbox Code Playgroud) .net c# initialization automatic-properties object-initializers
我已经看到了各种问题并回答了我们可以使用这样的反射来调用私有的setter:
但是我有一些代码,它有一个我需要设置的属性但不能因为没有setter,我不能添加一个setter,因为这不是我的代码.在这种情况下,有没有办法以某种方式使用反射设置值?
考虑一下:
public class interface Person : IPerson
{
int ID { get; protected set; }
string FirstName { get; set; }
string LastName { get; set; }
string FullName { get { return FirstName + " " + LastName; } }
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
public class StubPerson : IPerson
{
int ID { get { return 0; protected set { } }
string FirstName { get { return "Test" } set { } }
string LastName { get { return "User" …Run Code Online (Sandbox Code Playgroud) 使用字段而不是自动属性时是否存在明显的性能差异?如果我反序列化一组1000个JSON对象,每个具有5个属性呢?
我的iPhone域模型基本上是我的Web应用程序用于序列化为javascript的DTO的副本.他们都习惯使用自动属性.我担心我在MonoTouch中使用它们会浪费CPU周期.
我有一个sqlalchemy模型,设置如下:
class Entry(Base):
__tablename__ = 'entries'
__table__ = Table('entries', Base.metadata,
Column('id', Integer, primary_key=True, unique=True),
Column('user_id', Integer, ForeignKey('users.id', onupdate="CASCADE", ondelete="RESTRICT")),
Column('title', String(128)),
Column('slug', String(128), index=True),
Column('url', String(256), index=True),
Column('entry', Text),
Column('cached_entry', Text),
Column('created', DateTime, server_default=text('current_timestamp')),
Column('modified', DateTime, server_onupdate=text('current_timestamp')),
Column('pubdate', DateTime),
)
Run Code Online (Sandbox Code Playgroud)
我想的是,当我更新entry是cached_entry被重新生成,cached_entry是解析版本的降价entry.基本上我正在缓存markdown解析的输出,这样我就不必在每次显示条目时都这样做.我已经尝试使用@hybrid_method但似乎没有用,因为根本没有存储在数据库中.我已经在Google AppEngine上工作,但我似乎无法弄清楚如何使用SQLAlchemy做同样的事情.
我真的不希望不必将函数添加到使用的类而不是模型中的名称,因为从应用程序的角度来看它更难以强制执行,我不想意外遗漏某些东西.
在我坚持使用对象数据库的实例的类中,我不得不这样做:
private string _name;
public string Name
{
get { return this._name; }
set { _name = value; this.Save(); }
}
Run Code Online (Sandbox Code Playgroud)
而我宁愿输入这个:
[PersistedProperty(Name)]
private string _name;
Run Code Online (Sandbox Code Playgroud)
其中PersistedProperty属性生成一个Getter和Setter,就像默认的[Property()]属性一样,除了我想在生成的Setter中添加一行代码.
有没有办法可以创建一个属性来做到这一点?希望,它适用于Intellisense.
默认的[Property()]属性是如何做的呢?如果我看到代码,我可以嫁接......
注意:我实际上是在Boo中这样做,但是我认为我会给c#代码,因为更多的人可能愿意回答这个问题,但是,如果有一个Boo特定的解决方案,我全都耳朵!
更新:
我的目标只是减少打字和杂乱.事实证明,最简单的方法是使用一个脚本,该脚本根据我的类中的标记生成部分类.
从标记(与部分类一起)自动生成源代码很容易,实际上看起来像是一种非常有前途的方法来解决我们通常尝试使用继承和泛型类型解决的一些问题.
我有一个实现像属性的对象
public String Bla {get;set;}
Run Code Online (Sandbox Code Playgroud)
将实现更改为类似之后
private String _bla;
public String Bla
{
get { return _bla; }
set { _bla = value; }
}
Run Code Online (Sandbox Code Playgroud)
在反序列化中,这个属性是空的.
我有来自旧实现的大量序列化数据,并希望使用新实现加载它们
有没有办法,改变实现与旧的二进制文件兼容?
编辑:
有些人可能遇到同样的问题,所以这是我的hackish解决方案:
自动生成的字段的命名约定是无效的c#代码:
[CompilerGenerated]
private string <MyField>k__BackingField;
[CompilerGenerated]
public void set_MyField(string value)
{
this.<MyField>k__BackingField = value;
}
[CompilerGenerated]
public string get_MyField()
{
return this.<MyField>k__BackingField;
}
Run Code Online (Sandbox Code Playgroud)
对我来说快速而肮脏的修复是创建一个xMyFieldxK__BackingField在源代码中调用的私有支持字段,
并通过更换出现的所有修补系列化binarydata <MyField>与xMyFieldxdeserialisation前
我想在Django模型中禁用自动ID创建.有可能这样做吗?怎么样?
c# ×8
.net ×5
attributes ×2
properties ×2
boo ×1
interface ×1
performance ×1
postgresql ×1
python ×1
python-2.7 ×1
reflection ×1
sqlalchemy ×1
xamarin.ios ×1