나는 하나 또는 두 개의 메소드를 서로 후에 여러 번 호출해야하는 클래스가있다. 메서드는 현재 void
을 반환합니다. 내가 생각했는데, 그 방법이 중첩 될 수 있도록 this
을 반환하는 것이 더 좋을까요? 또는 그 아주 고려 아주 아주 나쁜가? 또는 나쁜 경우 동일한 유형의 새 객체가 반환되면 더 좋을까요? 아니면 어떻게 생각하니?C# : 메서드 중첩을 위해 'this'를 반환 하시겠습니까?
var a = new Adder();
a.Add(4);
a.Remove(1);
a.Add(7);
a.Remove(3);
다른 두이 방법을 사용할 수 있습니다 :
var a = new Adder()
.Add(4)
.Remove(1)
.Add(7)
.Remove(3);
을 첫 번째는이 방법을 사용할 수 있습니다
// Regular
class Adder
{
public Adder() { Number = 0; }
public int Number { get; private set; }
public void Add(int i) { Number += i; }
public void Remove(int i) { Number -= i; }
}
// Returning this
class Adder
{
public Adder() { Number = 0; }
public int Number { get; private set; }
public Adder Add(int i) { Number += i; return this; }
public Adder Remove(int i) { Number -= i; return this; }
}
// Returning new
class Adder
{
public Adder() : this(0) { }
private Adder(int i) { Number = i; }
public int Number { get; private set; }
public Adder Add(int i) { return new Adder(Number + i); }
public Adder Remove(int i) { return new Adder(Number - i); }
}
: 예를 들어 나는 가산기 클래스의 세 가지 버전을 만들었습니다
유일한 차이점은 첫 번째 경우의 a
이 new Adder()
인 반면 후자의 경우 마지막 방법의 결과입니다.
내가 처음 발견 한 것은 빠르게 반복적으로 반복해서 쓰는 것이 었습니다. 그래서 다른 버전 중 하나를 사용하고 싶습니다.
세 번째는 많은 String 메서드 및 IEnumerable 확장 메서드와 같은 다른 많은 메서드와 비슷합니다. 나는 그것이 당신이 var a = new Adder(); var b = a.Add(5);
과 같은 일을 할 수 있다는 점에서 긍정적 인면을 가지고 있다고 생각합니다. 그런 다음 0과 하나는 5였습니다. 그러나 동시에, 새로운 객체를 생성하는 것이 조금 비싸지 않습니까? 그리고 첫 번째 물체는 언제 죽을까요? 첫 번째 메서드가 일종의 반환합니다 때? 또는?
어쨌든, 나는 this
을 반환하고 그것을 사용할 것이라고 생각하지만, 다른 사람들이이 사건에 대해 어떻게 생각하는지 알고 싶어합니다. 가장 좋은 방법은 무엇입니까?
당신은 당신이 말하는대로하지 않습니다. 당신은 Number에서 더하거나 뺄 것이고 그것을 새로운 Adder (...)에 별도의 정수로 전달할 것입니다. – Samuel
오, 잘 잡으세요! 덕분에) – Svish