using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Creational.Builder
{
public class Person
{
public string Name;
public string Position;
public class Builder : PersonInfoBuilder<Builder>
{
}
public static Builder New => new Builder();
public override string ToString()
{
return $"{nameof(Name)}: {Name}, {nameof(Position)}: {Position}";
}
}
public abstract class PersonBuilder
{
protected Person person = new Person();
public Person Build()
{
return person;
}
}
// class Foo : Bar<Foo>
public class PersonInfoBuilder<SELF> : PersonBuilder
where SELF : PersonInfoBuilder<SELF>
{
public SELF Called(string name)
{
person.Name = name;
return (SELF)this;
}
}
public class PersonJobBuilder<SELF> : PersonInfoBuilder<PersonJobBuilder<SELF>>
where SELF : PersonJobBuilder<SELF>
{
public SELF WorksAsA(string position)
{
person.Position = position;
return (SELF)this;
}
}
internal class Program
{
public static void Main(string[] args)
{
var me = Person.New
.Called("Harry")
.WorksAsA("Testing")
.Build();
Console.WriteLine(me);
var builder = new Builder();
var person = builder.WorksAsA("d").
Console.WriteLine(person);
}
}
}
Код из курса Designpatterns, но он не будет идеальным.Я получаю следующие ошибки:
Person.Builder 'не содержит определения для «WorksAsA», и метод расширения «WorksAsA», принимающий первый аргумент типа «Person.Builder», не найден (вы пропустилидиректива using или ссылка на сборку?)
Builder 'является пространством имен, но используется как тип Creational.Builder
Невозможно использовать локальную переменную' person 'до ее объявления
Как я могу исправить эти проблемы ??