PropertyChangedCallback封装(PropertyChangedCallback encapsulation)
这已经困扰了我一段时间,所以我问一个同事他是否能够理解它,现在我在这里;)
为什么你可以在依赖属性的PropertyChangedCallback中访问持有类的私有成员?
让我通过这个例子进一步解释我的意思:/// <summary> /// Interaction logic for ZeControl.xaml /// </summary> public partial class ZeControl : UserControl { public ZeControl() { InitializeComponent(); } private bool m_Trololo; //Please note that this field is PRIVATE! #region Text public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } // Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc... public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(ZeControl), new UIPropertyMetadata( new PropertyChangedCallback((dpo, dpce) => { ((ZeControl)dpo).m_Trololo = true; //How the hell? //this.m_Trololo <-- would not compile, the callback is static. }))); #endregion }
这不是打破封装吗? 它甚至如何编译?
我问这个主要是因为我在我的WPF应用程序中使用它:它允许我保持变量私有,同时仍然在回调中访问它。
但由于它确实感觉不对,我不希望这在WPF vNext中“修复”,使我的应用程序不兼容。最好的祝福,
BAB。
This has been bugging me for a while, so I asked a coworker if he could make any sense of it, and now I'm here ;)
How come you can access private members of the holding class in the PropertyChangedCallback of a dependency property?
Let me explain further what i mean through this example:/// <summary> /// Interaction logic for ZeControl.xaml /// </summary> public partial class ZeControl : UserControl { public ZeControl() { InitializeComponent(); } private bool m_Trololo; //Please note that this field is PRIVATE! #region Text public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } // Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc... public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(ZeControl), new UIPropertyMetadata( new PropertyChangedCallback((dpo, dpce) => { ((ZeControl)dpo).m_Trololo = true; //How the hell? //this.m_Trololo <-- would not compile, the callback is static. }))); #endregion }
Isn't this breaking encapsulation? how does it even compiles?
I'm asking this mainly because I make use of it in my WPF applications: it allows me to keep a variable private while still accessing it in callbacks.
But since it really doesn't feel right at all, I wouldn't want this to be "fixed" in WPF vNext, making my apps incompatible.Best regards,
bab.
原文:https://stackoverflow.com/questions/9228248
最满意答案
尝试这样做。
JSONObject jsonObject = new JSONObject(results); String bedno = jsonObject.getString("bedNo"); String gender = jsonObject.getString("gender");
Try doing this.
JSONObject jsonObject = new JSONObject(results); String bedno = jsonObject.getString("bedNo"); String gender = jsonObject.getString("gender");
相关问答
更多-
下列中不属于面向对象的编程语言的是?[2022-05-30]
a -
实现javax.servlet.Filter 。 在doFilter()方法中,将传入的ServletRequest为HttpServletRequest 。 使用HttpServletRequest#getRequestURI()来获取路径。 使用简单的java.lang.String方法,如substring() , split() , concat()等来提取感兴趣的部分并构成新的路径。 使用ServletRequest#getRequestDispatcher()然后RequestDispatche ...
-
我完全按照你的建议(返回一个String )。 您可以考虑设置MIME类型以表示您正在返回JSON,但是(根据这个其他stackoverflow文章是“application / json”)。 I do exactly what you suggest (return a String). You might consider setting the MIME type to indicate you're returning JSON, though (according to this other s ...
-
它在jsp的情况下工作,因为请求发送到客户端,然后返回到服务器,但是在servlet中它不会重定向到客户端,因此您的过滤器不会显示在那里。 如果你想然后使用sendRedirect而不是转发。 检查下面的链接,看看不同的B / W sendRedirect和转发。 当您使用SendRedirect容器将请求传输到客户端或浏览器时,sendRedirect方法中给出的URL将作为对客户端的新请求可见。 阅读更多信息: http : //javarevisited.blogspot.com/2011/09/se ...
-
在Jersey 2中使用Hystrix Java Servlet和Servlet Filter(Using a Hystrix Java Servlet & Servlet Filter in Jersey 2)[2022-06-18]
不应在Jersey配置中注册Servlet和Servlet过滤器。 他们将被忽略。 您应该使用带有ServletRegistrationBean和FilterRegistrationBean的Spring Boot注册它们。 在你的Spring配置中,你可以做类似的事情 @Bean public ServletRegistrationBean someServlet() { ServletRegistrationBean registration = ServletRegisrationBean( ... -
过滤器的示例是压缩响应的GZIP过滤器。 一些servlet生成输出,gzip过滤器只是压缩它。 过滤器可以映射到多个servlet的进程输出,或者仅映射到任何路径,而与servlet的映射方式无关。 过滤器的另一个例子: 过滤以从输出中删除空格 过滤以设置缓存标头 过滤以检查用户是否可以实际访问给定的URL 在每种情况下,过滤器都有机会改变请求或响应,但通常不会自己生成响应。 Example of filter is GZIP Filter that compresses response. Some s ...
-
修复的线索是status = 0。 谷歌搜索,我发现onSubmit有一个问题。 因此,我将它改为单击按钮。 这是新的 HTML
相关文章
更多- java 封装
- 谁有封装分页的例子哇!!!!!
- 封装一个简单的solrserver组件
- 用jquery validate封装自己的验证库
- Storm【实践系列-如何写一个爬虫- 对于Protocol进行的封装】
- 自己封装的一个Solr Data Import Request Handler Scheduler
- 微信公众平台消息接口开发(2)-封装weixin.class.php
- 全手动封装教程+SRS9.80102 文本教程(适合初学)
- 微信公众平台消息接口开发(2)-封装weixin.class.php
- 微信公众平台消息接口开发-封装weixin.class.php(转)
最新问答
更多- 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
- 如何通过引用返回对象?(How is returning an object by reference possible?)
- 矩阵如何存储在内存中?(How are matrices stored in memory?)
- 每个请求的Java新会话?(Java New Session For Each Request?)
- css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
- 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
- xcode语法颜色编码解释?(xcode syntax color coding explained?)
- 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
- 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
- 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
- 西安哪有PLC可控制编程的培训
- 在Entity Framework中选择基类(Select base class in Entity Framework)
- 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
- 电脑二级VF有什么用
- Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
- 金华英语角.
- 手机软件如何制作
- 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
- 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
- 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
- Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
- 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
- python的访问器方法有哪些
- DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
- 在Ruby中对组合进行排序(Sorting a combination in Ruby)
- 网站开发的流程?
- 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
- 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
- 透明度错误IE11(Transparency bug IE11)
- linux的基本操作命令。。。