在C#中有一些预定义的委托
我知道这些:
EventHandler // Default event callbacks
EventHandler<T> // Default event callbacks with custom parameter (inheriting from EventArgs)
Action // Function without return value and without parameter
Action<T1, T2, T3, T4> // Function without return value and 1-4 parameters
Func<T1, T2, T3, T4, TResult> // Methos with 0-4 parameters and one result type
Predicate<T> // equivalent to Func<T, bool>
Run Code Online (Sandbox Code Playgroud)
对于特殊情况和框架的生成表单部分还有更多,但这些通常很适合在自编代码中使用.
如果你知道一些更有用的添加它们.否则就回答了.
我正在使用C#.
所以我有一个有一些领域的对象,并不重要.我有这些对象的通用列表.
List<MyObject> myObjects = new List<MyObject>();
myObjects.Add(myObject1);
myObjects.Add(myObject2);
myObjects.Add(myObject3);
Run Code Online (Sandbox Code Playgroud)
所以我想根据一些标准从列表中删除对象.例如,myObject.X >= 10.
我想使用该RemoveAll(Predicate<T> match)方法来执行此操作.
我知道我可以定义一个可以传递给RemoveAll的委托,但我想知道如何使用匿名委托定义这个内联,而不是创建一堆仅在一次使用的委托函数.
我有一个与Cocoa框架设计模式相关的基本问题.
委托和数据源之间有什么区别?
它们都可以使用@protocols声明,但是一些类或框架正在使用delegate,而另一些正在使用datasource.
我可以理解的UI/NSTableView是delegate对UI相关事件的响应,而datasource与数据完全相关.但是,我不知道Cocoa的UI类之外的任何数据源实现.
注意:
该Action<T>委托返回void.是否有任何其他内置委托返回非空值?
我正在使用C#,.NET 3.5.我理解如何利用事件,如何在我的班级中声明它们,如何将它们从其他地方挂钩等等.一个人为的例子:
public class MyList
{
private List<string> m_Strings = new List<string>();
public EventHandler<EventArgs> ElementAddedEvent;
public void Add(string value)
{
m_Strings.Add(value);
if (ElementAddedEvent != null)
ElementAddedEvent(value, EventArgs.Empty);
}
}
[TestClass]
public class TestMyList
{
private bool m_Fired = false;
[TestMethod]
public void TestEvents()
{
MyList tmp = new MyList();
tmp.ElementAddedEvent += new EventHandler<EventArgs>(Fired);
tmp.Add("test");
Assert.IsTrue(m_Fired);
}
private void Fired(object sender, EventArgs args)
{
m_Fired = true;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不明白的是,当一个人声明一个事件处理程序时
public EventHandler<EventArgs> ElementAddedEvent;
Run Code Online (Sandbox Code Playgroud)
它从未被初始化 - 所以,究竟是什么是ElementAddedEvent?它指向什么?以下操作无效,因为EventHandler永远不会被初始化:
[TestClass]
public class …Run Code Online (Sandbox Code Playgroud) 所以当我写这样的东西
Action action = new Action(()=>_myMessage = "hello");
Run Code Online (Sandbox Code Playgroud)
重构专业!强调这是一个冗余的代表创建,并允许我缩短它
Action action = () => _myMessage="hello";
Run Code Online (Sandbox Code Playgroud)
这通常很有效. 通常,但并非总是如此.例如,Rhino Mocks有一个名为Do的扩展方法:
IMethodOptions<T> Do(Delegate action);
Run Code Online (Sandbox Code Playgroud)
传递第一个版本,但第二个版本没有.究竟是什么在这里?
我正在编写我的第一个iPhone应用程序而且我无法切换视图.我有2个视图和每个(在AppDelegate一个实例中UIApplicationDelegate)的引用.我创建了两个实例applicationDidFinishLaunching并立即显示第一个视图.这很好用.
问题是在AppDelegate中引用另一个视图,我无法弄清楚如何获取它的引用,所以我可以切换到另一个视图.有没有办法获得对主要UIApplication或UIApplicationDelegate对象的引用?
我需要一个方法,该方法接受一个MethodInfo表示具有任意签名的非泛型静态方法的实例,并返回绑定到该方法的委托,该委托稍后可以使用Delegate.DynamicInvoke方法调用.我的第一次天真尝试看起来像这样:
using System;
using System.Reflection;
class Program
{
static void Main()
{
var method = CreateDelegate(typeof (Console).GetMethod("WriteLine", new[] {typeof (string)}));
method.DynamicInvoke("Hello world");
}
static Delegate CreateDelegate(MethodInfo method)
{
if (method == null)
{
throw new ArgumentNullException("method");
}
if (!method.IsStatic)
{
throw new ArgumentNullException("method", "The provided method is not static.");
}
if (method.ContainsGenericParameters)
{
throw new ArgumentException("The provided method contains unassigned generic type parameters.");
}
return method.CreateDelegate(typeof(Delegate)); // This does not work: System.ArgumentException: Type must derive from …Run Code Online (Sandbox Code Playgroud) 我正在构建一个自定义键盘,我正在我的实现以下委托方法InputViewController.
但我总是得到_textInput = nil_
- (void)textWillChange:(id<UITextInput>)textInput
- (void)textDidChange:(id<UITextInput>)textInput
- (void) selectionWillChange:(id<UITextInput>)textInput
- (void) selectionDidChange:(id<UITextInput>)textInput
Run Code Online (Sandbox Code Playgroud)
有人知道怎么解决吗?
这是nil有原因的吗?
我需要自己实施吗?
我正在做一个使用异步TCP套接字的小型多线程应用程序,但我会明白:我正在使用自定义事件从表单中读取值,并且事件使用的委托在完成时返回一个字符串.
我的问题是:这是正确的吗?可以从事件中返回值吗?或者有更好的方法吗?(比如使用表单的简单委托来读取值)
delegates ×10
c# ×7
.net ×2
.net-3.5 ×2
events ×2
cocoa ×1
datasource ×1
ios ×1
ios8 ×1
iphone ×1
lambda ×1
list ×1
methodinfo ×1
objective-c ×1
protocols ×1
reflection ×1
singleton ×1