相关疑难解决方法(0)

在C#3中编写流畅接口的技巧

我正在为C#中的流畅接口提供一些好的技巧.我自己只是在学习它,但很想听到别人在我正在阅读的文章之外的想法.特别是我在追求:

  1. 什么时候流利的?
  2. 有没有流利的模式?
  3. 什么是C#,使流畅的界面更流畅(例如扩展方法)
  4. 是一个复杂流畅的界面仍然是一个流利的?
  5. 重构以获得流畅的界面或重构现有的流畅界面
  6. 你曾与之合作或推荐的任何好例子吗?

如果您可以发布一个提示或思想,或每个帖子的任何内容.我想看看他们如何投票.

先感谢您.

c# design-patterns fluent-interface

43
推荐指数
6
解决办法
2万
查看次数

用C#写我的第一个DSL,然后挂上func <T>&Action

我正在努力编写我的第一个DSL用于工作中的简单工具.我正在使用构建器模式来设置复杂的父对象,但是我遇到了砖墙,用于构建父对象的子集合.这是一个示例:

使用:

var myMorningCoffee = Coffee.Make.WithCream().WithOuncesToServe(16);
Run Code Online (Sandbox Code Playgroud)

关闭样本(我认为这就是他们所谓的):

var myMorningCoffee = Coffee.Make.WithCream().PourIn( 
                        x => {
                                x.ShotOfExpresso.AtTemperature(100);
                                x.ShotOfExpresso.AtTemperature(100).OfPremiumType();
                             }
                        ).WithOuncesToServe(16);
Run Code Online (Sandbox Code Playgroud)

示例类(没有子PourIn()方法,因为这是我想要弄清楚的.)

 public class Coffee
 {
   private bool _cream;

   public Coffee Make { get new Coffee(); }
   public Coffee WithCream()
   {
     _cream = true;
     return this;
   }
   public Coffee WithOuncesToServe(int ounces)
   {
     _ounces = ounces;
     return this;
   }
 }
Run Code Online (Sandbox Code Playgroud)

所以在我的应用程序工作中,我有复杂的对象构建很好,但我不能为我的生活弄清楚如何获取父对象上的子集合编码的lambda.(在这个例子中,它是expresso的镜头(儿童收藏)).

也许我在这里混淆概念而且我不介意被直接设置; 但是,我真的很喜欢这个如何阅读,并想知道如何使这个工作.

谢谢,山姆

c# dsl lambda closures action

6
推荐指数
1
解决办法
2291
查看次数

为什么有人说"Builder Pattern"比使用Fluent接口的Extension方法更好?

在本讨论中(创建流畅的API),响应表明Builder模式比使用Extension方法创建Fluent接口要好.

这可能是什么原因?扩展方法遵循SOLID原则中的"O"......我个人只使用扩展方法来开发Fluent接口,但我想知道是否需要重新考虑这个...

c# extension-methods fluent builder

2
推荐指数
1
解决办法
871
查看次数

如何在C#中调用method().method()

可能重复:
C#中的方法链接
创建流畅的API

我该如何进行以下编码?

Class1 objClass1 = new Class1().Add(1).Add(2).Add(3)...
Run Code Online (Sandbox Code Playgroud)

等等..

我如何实现该Add()方法来调用将反映在同一对象上的无限时间?

c#

1
推荐指数
2
解决办法
8559
查看次数