- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果您有多个属性在 setter 中实现相同的方法,是否有办法使其成为默认 setter 的一部分?
如果我有多个属性在设置时调用 Filter()
,有没有办法将它插入“基本 setter ”,这样我就不必拥有 Filter()
在每个 setter 中调用?
private string _MyVal1;
public string MyVal1 {
lấy {
return _MyVal1;
}
bộ {
_MyVal1 = value;
Filter();
OnPropertyChanged("MyVal1");
}
}
private string _MyVal2;
public string MyVal2 {
lấy {
return _MyVal2;
}
bộ {
_MyVal2 = value;
Filter();
OnPropertyChanged("MyVal2");
}
}
private string _MyValN;
public string MyValN {
lấy {
return _MyValN;
}
bộ {
_MyValN = value;
Filter();
OnPropertyChanged("MyValN");
}
}
于是变成了这样:
private string _MyValN;
public string MyValN {
lấy {
return _MyValN;
}
set : FilterSetter {
_MyValN = value;
OnPropertyChanged("MyValN");
}
}
câu trả lời hay nhất
执行此操作的另一种方法是使用 Unity 框架提供的拦截。通过拦截,您的类实现了一个接口(interface),并且您会告诉框架,每次在实现该接口(interface)的类上调用方法时,运行这些拦截器。您的拦截器代码可以查看被调用的方法是否以 set_ 为前缀。拦截器代码在前往函数的途中执行一次,在返回途中执行一次。在返回的路上,您可以让拦截器调用 filter 方法(当然假设它是在接口(interface)上定义的)。
具体例子:
使用 NuGet 为您的项目添加 Unity 和 Unity 扩展
sử dụng Hệ thống;
namespace InterceptSetter
{
interface ISomeObject
{
string SomeProperty { get; set; }
void Filter();
}
public class SomeObject : ISomeObject
{
public string SomeProperty { get; set; }
public void Filter()
{
Console.Out.WriteLine("Filter Called");
}
}
}
using Microsoft.Practices.Unity.InterceptionExtension;
sử dụng Hệ thống;
sử dụng System.Collections.Generic;
sử dụng System.Linq;
namespace InterceptSetter
{
///
/// See http://msdn.microsoft.com/en-us/library/ff660871(v=pandp.20).aspx
/// See http://msdn.microsoft.com/en-us/library/ff647107.aspx
///
class SetterCallsFilterMethodBehavior : IInterceptionBehavior
{
public IEnumerable GetRequiredInterfaces()
{
// we dont need anything
return new[] { typeof(ISomeObject) };
}
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{ // Do not intercept non-setter methods
if (!input.MethodBase.Name.StartsWith("set_"))
return getNext()(input, getNext);
IMethodReturn msg = getNext()(input, getNext);
// post processing. this is where we call filter
if (input.Target is ISomeObject)
{
(input.Target as ISomeObject).Filter();
}
return msg;
}
///
/// We always execute
///
public bool WillExecute
{
get { return true; }
}
}
}
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.InterceptionExtension;
sử dụng Hệ thống;
namespace InterceptSetter
{
class Program
{
void tĩnh Main(chuỗi[] args)
{
UnityContainer container = new UnityContainer();
container.AddNewExtension();
container.RegisterType(
new Interceptor(),
new InterceptionBehavior());
// we must get our instance from unity for interception to occur
ISomeObject myObject = container.Resolve();
myObject.SomeProperty = "Hello Setter";
Console.ReadLine();
}
}
}
运行这个你会看到拦截器实际上调用了过滤器方法(打印到控制台)。
Unity 并不是唯一的依赖注入(inject)/拦截框架 (google PostSharp)。 Unity 是我熟悉的,所以这就是这个例子使用的。
关于c# - 您能否使方法成为属性变量中默认 setter 操作的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15227409/
Tôi đang cố gắng thực hiện điều này Trong hành động của tôi, hãy lấy danh sách các đối tượng từ cơ sở dữ liệu (ok) In trên JSP (ok) Danh sách này xuất hiện dưới dạng bảng có thể chỉnh sửa trong JSP. Tôi muốn sửa đổi và sau đó gửi nó trở lại hoạt động tương tự để lưu nó vào cơ sở dữ liệu của tôi (không thành công. Khi tôi sử dụng
Tôi có một truy vấn Linq to Entities có dạng: var x = from a in SomeData trong đó ... một số điều kiện ... chọn
Tôi có truy vấn sau đây. var query = Repository.Query() .Where(p => !p.IsDeleted && p.Article.ArticleSections.Cou
Tôi đang viết một gói ứng dụng chứa một lớp chính với phương thức chính tách biệt với lớp GUI, lớp GUI chứa một jframe với jtabbedpane, nó có hai tab, tab đầu tiên chứa một jtable có tên là jtable1, không.
Đoạn mã sau tạo ra lỗi Truy vấn lồng nhau không được hỗ trợ. Operation1='Case' Operation2='Collect' Câu hỏi là tôi đang làm gì sai? Làm thế nào tôi có thể giải quyết nó?
Tôi đã thiết lập môi trường docker cục bộ cho cụm redis HA (2 bản sao, 1 bản chính, 3 điểm canh gác). Chỉ Sentinel hiển thị các cổng (10021, 10022, 10023). Tôi đang sử dụng stackexchange
Tôi đang xây dựng "URL tích hợp" trong Desk.com sử dụng cú pháp bộ lọc mẫu Shopify Liquid. Đối với truy vấn có ngày bắt đầu 7 ngày trước và ngày kết thúc bây giờ, URL cần chứa "ngày bắt đầu" và "ngày kết thúc"
Chắc hẳn bạn đã nghĩ về điều đó. Tuy nhiên, tình huống này không lý tưởng. Trong python, chỉ có thể sử dụng các thao tác như i++/i--. Thao tác tăng tự động trong python Đoạn mã sau được hầu hết các lập trình viên sử dụng phổ biến để thực hiện các thao tác tăng (trừ) tự động trong python
Tôi cần hiển thị các nhánh trong mọi bản dựng thủ công bằng hành động github. Ví dụ: https://gyazo.com/2131bf83b0df1e2157480e5be842d4fb Tôi nên hiển thị các nhánh thay vì một nhánh. câu trả lời hay nhất
Tôi có câu hỏi về toán tử Perl qr: #!/usr/bin/Perl -w &mysplit("a:b:c", /:/); sub mysplit { my($str, $patt
Tôi đã tạo ERD (Sơ đồ mối quan hệ thực thể) bằng ArgoUML và tôi muốn tạo hai thao tác trong một lớp, cả hai đều có kiểu trả về void. Tuy nhiên, tôi chỉ có thể tạo một thao tác trả về kiểu void. Ví dụ: Tôi có thể đặt cuốn sách
Các hành động trên Github vẫn đang trong giai đoạn thử nghiệm và khá mới, nhưng tôi hy vọng ai đó có thể trợ giúp. Tôi nghĩ có thể chạy các hành động github trên nhánh chính và kéo các yêu cầu như thế này: on: pull_request push: b
Tôi đang cố gắng tạo quy trình làm việc Twilio để thực hiện cuộc gọi điện thoại và ghi lại những gì người dùng nói. Tôi đang sử dụng Bản ghi cho việc này nhưng tôi không chắc nên đặt gì vào tham số hành động. Mặc dù tôi biết Twilio sẽ gửi thông tin về việc gọi tới UR
Tôi không chắc liệu điều này có khả thi hay không, nhưng nó đáng để thử. Tôi đang sử dụng bộ đệm stencil để giảm lượng ánh sáng rút quá nhiều (khi máy ảnh ở ngoài âm lượng) trong trình kết xuất bị trì hoãn bằng thuật toán này: Sử dụng trình đổ bóng rẻ tiền, đặt bài kiểm tra độ sâu thành LEQUAL Vẽ mặt sau, đánh dấu chúng theo khuôn
Có cách thông minh nào để sao chép và đổi tên tệp qua GitHub không? Tôi muốn sao chép một số tệp readme vào thư mục /docs (:= cùng một kho lưu trữ, không phải từ xa!) và chúng sẽ được đổi tên theo nội dung chính của chúng
Tôi có tệp .csv trong đó cột đầu tiên chứa tên người dùng. Họ có dạng FirstName LastName. Tôi muốn lấy FirstName và thêm ký tự đầu tiên của LastName vào đó rồi xóa khoảng trắng. Chạy
Sitecore tạo URL dựa trên tên dự án được xác định trong cây Sitecore, http://samplewebsite/Pages/Sample Page nhưng khách hàng của chúng tôi quan tâm đến việc hạ thấp tất cả các URL (Trang/Trang mẫu
Tôi đang cố gắng thực hiện một số phép tính nhưng khi tôi nhập số tiền thì nó sẽ hoàn thành. Tôi chỉ muốn điều này xảy ra bằng cách nhấp vào nút thay vì tự động. Những gì tôi đã làm cho đến nay: Angular JS - Programming-fr
Công ty của tôi đã tạo ra một cách phức tạp để di chuyển tệp giữa các môi trường và bây giờ chúng tôi muốn di chuyển một số tệp JS đã xây dựng (được chuyển đổi và rút gọn) từ kho lưu trữ github này sang kho lưu trữ github khác. Điều này có thể thực hiện được bằng cách sử dụng các hành động của github không? Câu trả lời hay nhất là đơn giản nhất
Trong mã của tôi, tôi tạo một đối tượng JSONArray. Và đã thêm hai JSONObject vào đối tượng JSONArray. Tôi đang sử dụng json-simple-1.1.jar. Mã của tôi là gói j
Tôi là một lập trình viên xuất sắc, rất giỏi!