2010-05-14 38 views
3

我忙于深入研究诸如多线程和死锁等问题。本书针对的是伪代码和C代码,而且我正在忙于寻找诸如Mutex锁和监视器。语法糖的使用/内置功能

这让人想起以下;在C#中,事实上.NET我们有很多用于处理事务的语法糖。 For instance(.NET 3.5):

lock(obj) 
{ 
    body 
} 

是相同的:

var temp = obj; 

Monitor.Enter(temp); 

try 
{ 
    body 
} 
finally 
{ 
    Monitor.Exit(temp); 
} 

当然还有其他例子,如using() {}结构等我的问题是当它更适用于“去它本身“并且自己编写代码而不是在语言中使用”语法糖“?一个人是否应该用自己的方式,而不是那些在编码语言方面更有经验的人?

我记得不要在using块中使用Process对象来帮助解决一些多线程问题和无限循环。我仍然感到肮脏,因为没有在那里使用的构造。

感谢,

凯尔

回答

12

尽可能地坚持语法糖。它简洁,易于维护,不易出错,易于理解,而且他们创造它是有原因的。

如果您必须手动控制某些内容(例如,操纵IEnumerator<T>而不是使用foreach),那么是的,请丢弃语法糖。否则,习惯是一件好事。

2

在C#中,此LINQ声明:

var filteredCities = 
    from city in cities 
    where city.StartsWith("L") && city.Length < 15 
    orderby city 
    select city; 

是语法糖(和等同于):

var filteredCities = 
    cities.Where(c => c.StartsWith("L") && c.Length < 15)) 
    .OrderBy(c => c) 
    .Select(c => c); 

如果你知道C#好吧,后者的版本比前者更容易分开;你可以清楚地看到它正在做什么。

但是,对于典型的日常使用,大多数人会发现加糖版本的清洁剂可以查看,并且更易于阅读。

+1

在第二个例子中,你仍然有“语法糖”。想象一下,如果你不得不做'Enumerable.Where(城市,匿名认识方法)'的东西。 – 2010-08-31 19:30:50

7

软件开发的最大成本是长期维护,所以答案总是如此,能为您提供最简单和最具成本效益的维护路径(所有可能证明规则的例外情况,perf例如)。如果你可以使用语法糖来使你的代码更具可读性,那么这是你的答案,如果语法糖阻碍你的话,那就不要使用它。

1

您不能使用using构造的例子是我在.NET语言和框架中提供的新方法中最常见的偏差。只有很多情况下,IDisposable对象的作用域稍微超出了单个函数的范围。

但是,了解这些快捷方式的功能仍然与以往一样重要。我确实认为许多人如果不能将它包装在using中,就不会处理对象,因为他们不明白它的作用以及它变得更容易。

所以我确实希望有一些工具提示helptext用于这些精彩的快捷方式,这表明正在发生一些重要的事情 - 甚至可能是不同的关键字着色。

编辑:

我一直在想这个,我已经决定,我相信using仅仅是选择了一个误导性的关键字。 foreach确实听起来像,而using并不意味着,对我来说,实际上发生了什么。任何人对此有任何想法?如果他们的关键字是disposing而不是;你认为它会更清楚吗?