在 .Net 中使用私有集初始化属性

2024-04-06

public class Foo
{
    public string Name { get; private set;} // <-- Because set is private,
}

void Main()
{
    var bar = new Foo {Name = "baz"}; // <-- This doesn't compile
    /*The property or indexer 'UserQuery.Foo.Name' cannot be used 
      in this context because the set accessor is inaccessible*/

    using (DataContext dc = new DataContext(Connection))
    {
        // yet the following line works.  **How**?
        IEnumerable<Foo> qux = dc.ExecuteQuery<Foo>(
           "SELECT Name FROM Customer");
    }
    foreach (q in qux) Console.WriteLine(q);
}

我刚刚使用了 private 修饰符,因为它有效并且可以防止我对代码感到愚蠢,但现在我需要创建一个新的 Foo,我刚刚从我的属性中删除了 private 修饰符。我只是很好奇,为什么 ExecuteQuery 会变成 Foo 的 IEnumerable 的工作?

EDIT好的,所以 private 修饰符不会阻止反射看到设置器,并且从答案来看,ExecuteQuery(或者它是数据上下文?)使用反射来获取属性名称并忽略修饰符。有办法验证吗?我怎么能自己想出这个办法呢? (将反射添加到标签列表中)


在 Foo 上创建一个接受“Name”值的构造函数:

public class Foo
{
    public Foo(string name)
    {
        Name = name;
    }

    public string Name { get; private set; }
}

现在像这样构建你的 Foo :

var bar = new Foo("baz");

Edit(阅读你问题的其余部分)

我的猜测是 ExecuteQuery 使用反射来检查类并查找其属性。它可能并不关心 Name 上的 setter 是私有的 - 只是 Name 根本有一个 setter。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 .Net 中使用私有集初始化属性 的相关文章

随机推荐

  • 想要使用 32 字节的 AES 256 CBC,但它显示 java.security.InvalidAlgorithmParameterException

    我正在使用 AES 256 CBC 我有 32 字节的 IV 但是当我运行它时 它显示一个异常 Exception in thread main java lang RuntimeException java security Invali
  • 聚焦动态创建的元素

    如何聚焦动态创建的元素 只需致电 focus https developer mozilla org en DOM element focus添加到 DOM 后的元素上 例如 var input document createElement
  • 如何获取滑块的值并实时更新?

    我有一个带有自定义控制栏的 HTML 视频标签 在其中我希望搜索栏和音量栏在用户浏览范围时实时更新其值 目前 音量在用户调整滑块后更新 而不是在用户单击并拖动时更新 在 HTML 中我将它们设置如下 div div
  • 通过 LINQ C# 根据单词出现情况进行复杂排序列表 [重复]

    这个问题在这里已经有答案了 可能的重复 通过 LINQ C 按单词出现次数对列表进行排序 https stackoverflow com questions 11392014 sort list by occurrence of a wor
  • Ofstream 创建但不会写入文件

    我编写了一些代码 执行基本的 fizzbuzz 程序来测试我的日志记录类 由于某种原因 数据被很好地转储到控制台 并且文件被创建得很好 但是每当我打开它时 日志文件都是空的 我的主要在这里 int main logger loggerObj
  • 查找数组中重复次数最多的对象

    我有一个充满字符串的数组 每个字符串都是一个名称 有些名称可能相同 有些可能不同 我正在使用的语言是 Objective C 我希望能够从该数组中找出哪个名称最受欢迎 该数组将根据用户提供给应用程序的信息是动态的 我不知道如何有效地实现这一
  • 使用用户名和密码在 C# 中启动进程会引发“访问被拒绝”异常

    在运行模拟的 NET 3 5 Web 应用程序中 我尝试通过以下方式执行进程 var process new Process StartInfo CreateNoWindow true FileName someFileName Domai
  • 如何包含与其中的 OBJECT 文件同名的静态库?

    我正在开发一个 iPad 应用程序 其中包含 2 个第三方静态库 这两个库中的目标文件的名称相同 在构建应用程序时我得到 Apple Mach O id 错误 因为这两个库中的目标文件名称相同 如何解决这个问题呢 错误看起来像 ld dup
  • 在android中使用SMTP无意图发送邮件

    您好 我正在开发一个 Android 应用程序 只需单击按钮即可发送邮件 代码最初可以工作 但由于某种原因现在无法工作 有人可以帮我解决这个问题吗 电子邮件受保护 cdn cgi l email protection是收件人 电子邮件受保护
  • 在 selenium 上使用 BeautifulSoup 和 Geckodriver 有什么区别?

    我目前对使用 selenium 3 的 beautiful soup 和 geckodriver 都是新手 我正在开发一个项目 我必须从网页中抓取 URL 我发现它们都用于网页抓取 但无法区分两者之间的区别 BeautifulSoup 和
  • 为什么需要用 pyqtSlot 装饰连接的槽?

    我正在使用 pyqt5 并且使用类似于以下的代码连接了几种方法 self progress canceled connect self cancel 例如 其中self cancel is def cancel self self time
  • iOS:条形样式外观缺少 Monotouch 绑定?

    我正在尝试将其转换为 Monotouch C UINavigationBar appearance setBarStyle UIBarStyleBlackOpaque 但在外观对象上似乎没有条形样式 是否有解决方法或替代接入点 此房源没有装
  • Angular ngRoute 突然将 URL 转换为编码字符 #!/#%2F

    我的应用程序中的所有内容都工作正常 直到我尝试添加 ngAnimate ngMaterial 和 ng image gallery 我不知道添加这些模块是否是问题的根源 但在问题发生之前我没有更改任何其他内容 从那时起 即使在我从 app
  • Android——在 OnDrawFrame 方法之外将 GLSurfaceView.Renderer 置于睡眠状态(如 Thread.sleep(20))

    我想控制 GLSurfaceView Renderer 的渲染速率 我在扩展 GLSurfaceView 的类中实现了一个线程 并在 while true 循环中定期将其置于睡眠状态 这不会减慢渲染器的速度 有一个很好的答案here htt
  • 自旋锁与信号量

    信号量和自旋锁之间的基本区别是什么 我们什么时候会使用信号量而不是自旋锁 自旋锁和信号量主要有四个不同点 1 它们是什么 A spinlock是锁的一种可能实现 即通过忙等待 旋转 实现的锁 信号量是锁的概括 或者 相反 锁是信号量的特例
  • 带有节标题的列表视图android

    在 android listview gt Headerbar section 中是否有可能不滚动 直到该部分的列表不滚动 就像 iPhone 的桌面视图一样 我使用了部分列表视图 但我想要像这个 iphone 表格视图 有没有可能 谢谢
  • Jenkins 在 ClearCase 中创建视图

    我正在使用 Jenkins 和 ClearCase 进行自动构建 但遇到了问题 我编写了一个批处理脚本 使用cleartool命令mkview在ClearCase中创建视图 当我通过单击脚本来执行该脚本时 一切正常 视图是在 ClearCa
  • 解析在tinyxml中

    如何在 TinyXML 中解析以下内容
  • netstandard 1.5 中的 BinaryFormatter

    根据 NET CoreFx API 及其关联的 NET 平台标准版本列表 https github com dotnet corefx blob master Documentation architecture net platform
  • 在 .Net 中使用私有集初始化属性

    public class Foo public string Name get private set lt Because set is private void Main var bar new Foo Name baz lt This