在C#语言和.NET框架中,您能帮我理解委托吗?我试图检查一些代码,发现我收到的结果对我来说意外.这里是:
class Program
{
public static int I = 0;
static Func<string> del = new Func<string>(I.ToString);
static void Main(string[] args)
{
I = 10;
Console.WriteLine("{0}", del());
}
}
Run Code Online (Sandbox Code Playgroud)
答案是0,但不是10.为什么?
在我的应用程序中,当我设置时,我会收到语义问题警告ViewController.delegate = self.我搜索过并发现了类似的帖子,但没有一个能够解决我的问题.
ViewController.m:
GameAddViewController *gameAddViewContoller = [[navigationController viewControllers] objectAtIndex:0];
gameAddViewContoller.delegate=self;
Run Code Online (Sandbox Code Playgroud)
我在设置时收到错误消息.delegate=self.
GameAddViewController.h:
@protocol GameAddViewControllerDelegate <NSObject>
- (void)gameAddViewControllerDidCancel:(GameAddViewController *)controller;
- (void)gameAddViewController:(GameAddViewController *)controller didAddGame:(Game *) game;
@end
@interface GameAddViewController : UITableViewController <GameAddViewControllerDelegate>
{
sqlite3 *pitchcountDB;
NSString *dbPath;
}
@property (nonatomic, strong) id <GameAddViewControllerDelegate> delegate;
...
@end
Run Code Online (Sandbox Code Playgroud)
ViewController.h:
#import "GameAddViewController.h"
@class ViewController;
@protocol ViewControllerDelegate <NSObject>
- (void)ViewControllerDidCancel:(ViewController *)controller;
@end
@interface ViewController : UIViewController <ViewControllerDelegate>
-(void) checkAndCreateFile;
@end
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我正确的方向来解决警告信息吗?
是否可以在C#中定义一个类
class GenericCollection<T> : SomeBaseCollection<T> where T : Delegate
Run Code Online (Sandbox Code Playgroud)
我无法为我的生活在.NET 3.5中完成这一切.我试过用
delegate, Delegate, Action<T> and Func<T, T>
在我看来,这应该是允许的某种方式.我正在尝试实现自己的EventQueue.
我最终只是这样做[原始近似注意你].
internal delegate void DWork();
class EventQueue {
private Queue<DWork> eventq;
}
Run Code Online (Sandbox Code Playgroud)
但是后来我失去了为不同类型的函数重用相同定义的能力.
思考?
按照惯例,类通常被命名为名词,动词之类的方法和形容词之类的接口.
委托的常见命名约定是什么?或者,当代表在类型和其他事物中列出时,区分其名称的好方法是什么?
我的直接假设是将委托更可能命名为形容词,因为单个方法接口通常可以用委托替换.
一些想法:
delegate object ValueExtracting(object container);
delegate object ValueExtractor(object container);
delegate object ValueExtractionHandling(object container);
delegate object ValueExtractionHandler(object container);
Run Code Online (Sandbox Code Playgroud) 嗨,我正在尝试更改用户在我的tableview中刷一个uitableviewcell时在删除按钮中显示的文本.
我在另一个问题线程中看到了一个例子,说明要使用这个tableview委托
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
我的问题是,我如何使用这种方法..我不知道如何使用它.
拿下面的代码:
private void anEvent(object sender, EventArgs e) {
//some code
}
Run Code Online (Sandbox Code Playgroud)
以下有什么区别?
[object].[event] += anEvent;
//and
[object].[event] += new EventHandler(anEvent);
Run Code Online (Sandbox Code Playgroud)
[UPDATE]
显然,两者之间没有区别......前者只是后者的语法糖.
我知道"C++代表"的主题已经完成,而http://www.codeproject.com和http://stackoverflow.com都深深地涵盖了这个问题.
一般来说,似乎Don Clugston最快的代表是许多人的首选.还有一些其他流行的.
但是,我注意到这些文章中的大多数都是旧的(大约在2005年),并且许多设计选择似乎都是考虑到VC7之类的旧编译器.
我需要一个非常快速的代理实现音频应用程序.
我仍然需要它可移植(Windows,Mac,Linux),但我只使用现代编译器(VC9,VS2008 SP1和GCC 4.5.x中的编译器).
我的主要标准是:
此外,我真的不需要异国情调的功能.我只需要一个好的旧指针到方法的东西.无需支持静态方法,自由函数或类似的东西.
截至今天,推荐的方法是什么?仍然使用唐的版本?或者是否存在关于另一种选择的"社区共识"?
我真的不想使用Boost.signal/signal2,因为它在性能方面是不可接受的.对QT的依赖也是不可接受的.
此外,我在google搜索时看到了一些较新的库,例如cpp-events,但我找不到任何来自用户的反馈,包括SO.
我有一个类,它是一个子类UIView.我可以通过实现drawRect方法或通过实现drawLayer:inContext:哪个是委托方法在视图中绘制内容CALayer.
我有两个问题:
如果我实现drawLayer:inContext:,它被调用(并且drawRect不是,至少就断点可以告诉),即使我没有CALayer通过使用以下方式将我的视图指定为委托:
[[self layer] setDelegate:self];
如果我的实例未被定义为图层的委托,那么如何调用委托方法?什么机制可以防止drawRect被drawLayer:inContext:调用?
Objective C的iPhone开发中的"委托"是什么?
我可以找到关于Func <>和Action <>的所有示例都很简单,如下所示,您可以看到它们在技术上如何工作,但我希望看到它们用于解决以前无法解决的问题的示例中只有在一个更复杂的方式,即我知道他们是如何工作的,我可以看到他们是可以解决简洁,功能强大,所以我想了解他们在更大的意义上他们解决什么样的问题,我怎么可能会在使用它们应用程序设计.
您以什么方式(模式)使用Func <>和Action <>来解决实际问题?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestFunc8282
{
class Program
{
static void Main(string[] args)
{
//func with delegate
Func<string, string> convert = delegate(string s)
{
return s.ToUpper();
};
//func with lambda
Func<string, string> convert2 = s => s.Substring(3, 10);
//action
Action<int,string> recordIt = (i,title) =>
{
Console.WriteLine("--- {0}:",title);
Console.WriteLine("Adding five to {0}:", i);
Console.WriteLine(i + 5);
};
Console.WriteLine(convert("This is the first test.")); …Run Code Online (Sandbox Code Playgroud) delegates ×10
c# ×4
ios ×4
iphone ×3
.net ×2
objective-c ×2
action ×1
c++ ×1
constraints ×1
events ×1
func ×1
generics ×1
performance ×1
uitableview ×1