2

我正在考虑使用扩展方法来链接 ac# 语句,使其看起来像下面的 jQuery:

foo foo2 = 
  new foo().Title(foo1.Title)
  .Name(foo1.Name)
  .DoSomeStuff()
  .DoSomeMoreStuff();

这是一个好/坏主意吗?

public class foo
{
  public string Title {get;set;}
  public string Name {get;set;}
  public int Age {get;set;}

  public foo(){} 
}

public static class fooExtension
{
  public static foo Title(this foo source, string title)
  {
    source.Title = title;
    return source;
  }

 //and other extensions
}

更新:更多解释作为我正在考虑的“为什么”。 我有两件事:

  1. 我从一个对象获取数据并使用它来设置另一个对象的属性。
  2. 我需要对这些属性执行一些操作。

所以我的初始代码看起来更像

foo2.bars = foo1.bars;
foo2.RemoveUnderage();
foo2.NotifyPatronsBarsAreFull();

相反,我认为写起来可能更具描述性:

foo2.bars(foo1.bars).RemoveUnderage().NotifyPatrons();

初始化器很棒,但它们也将属性捆绑在一起,我希望属性集接近我将对它们执行的操作。

4

4 回答 4

5

使用对象初始化器有什么问题吗?

new Foo { Title = foo1.Title, Name = foo1.Name }
   .DoSomeStuff()
   .DoSomeMoreStuff();

一般来说,链接很好(查看 LINQ),但对象初始化器意味着您不需要添加看起来像属性的方法。

于 2011-03-29T18:25:35.543 回答
0

我个人喜欢这种“流利”的编程风格。正确命名的方法看起来像句子。我会稍微改变你的:

foo foo2 = new foo()
{
    Title = foo1.Title,
    Name = foo1.Name
}
.DoSomeStuff()
.DoSomeMoreStuff(); 
于 2011-03-29T18:26:52.753 回答
0

我认为在可读性方面这是一个坏主意,但这完全是个人的事情。

于 2011-03-29T18:29:51.113 回答
0

你的意思是流畅的界面?在某些情况下,在 .NET Framework 中的类中使用相同的方法(即 StringBuilder 或 LINQ 扩展方法)。但是,必须显式创建流利的界面,并且它需要大量的工作,并且使用 C# 之外的另一种语言可能不是那么漂亮。我不认为为每个班级创建流畅的界面是在短时间内交付优质软件的好方法。

于 2011-03-29T18:37:48.193 回答