{ [Required] public string ConnectionString
[BuilderDefault(30)]
public int CommandTimeout { get; set; }
[BuilderDefault(100)]
public int MaxPoolSize { get; set; }
[BuilderDefault(true)]
public bool EnableRetry { get; set; }
[BuilderDefault(3)]
public int MaxRetryCount { get; set; }
}
// 浣跨敤 var config = DatabaseConfiguration.CreateBuilder() .WithConnectionString("Server=localhost;Database=MyDb") .WithCommandTimeout(60) .WithMaxPoolSize(200) .Build();
### 鍦烘櫙 2锛欻TTP 璇锋眰鏋勫缓
**闇€姹?*锛氭瀯寤?HTTP 璇锋眰锛屾敮鎸佸悇绉嶉€夐」銆?
```csharp
[GenerateBuilder]
public partial class HttpRequestOptions
{
public string Url { get; set; }
public string Method { get; set; }
public Dictionary<string, string> Headers { get; set; }
public string Body { get; set; }
public int Timeout { get; set; }
public bool FollowRedirects { get; set; }
}
// 浣跨敤
var request = HttpRequestOptions.CreateBuilder()
.WithUrl("https://api.example.com/users")
.WithMethod("POST")
.AddHeader("Content-Type", "application/json")
.AddHeader("Authorization", "Bearer token")
.WithBody("{\"name\":\"John\"}")
.WithTimeout(30000)
.Build();鍦烘櫙 3锛氭祴璇曟暟鎹瀯寤?
**闇€姹?*锛氬湪鍗曞厓娴嬭瘯涓揩閫熸瀯寤烘祴璇曟暟鎹€?
[GenerateBuilder]
public partial class TestUser
{
public int Id { get; set; }
public string Username { get; set; }
public string Email { get; set; }
public List<string> Roles { get; set; }
public bool IsActive { get; set; }
}
// 鍦ㄦ祴璇曚腑浣跨敤
[Fact]
public void UserService_CreateUser_ShouldSucceed()
{
// Arrange
var user = TestUser.CreateBuilder()
.WithId(1)
.WithUsername("testuser")
.WithEmail("test@example.com")
.AddRole("User")
.AddRole("Admin")
.WithIsActive(true)
.Build();
// Act
var result = userService.CreateUser(user);
// Assert
Assert.True(result.Success);
}鍦烘櫙 4锛氭煡璇㈡瀯寤哄櫒
**闇€姹?*锛氭瀯寤哄鏉傜殑鏁版嵁搴撴煡璇€?
[GenerateBuilder]
public partial class QueryOptions
{
public string Table { get; set; }
public List<string> Columns { get; set; }
public string WhereClause { get; set; }
public string OrderBy { get; set; }
public int? Limit { get; set; }
public int? Offset { get; set; }
}
// 浣跨敤
var query = QueryOptions.CreateBuilder()
.WithTable("Users")
.AddColumn("Id")
.AddColumn("Name")
.AddColumn("Email")
.WithWhereClause("Age > 18")
.WithOrderBy("Name ASC")
.WithLimit(10)
.WithOffset(0)
.Build();鍦烘櫙 5锛歎I 缁勪欢閰嶇疆
**闇€姹?*锛氶厤缃鏉傜殑 UI 缁勪欢銆?
[GenerateBuilder]
public partial class ButtonConfig
{
public string Text { get; set; }
public string Color { get; set; }
public string Size { get; set; }
public bool Disabled { get; set; }
public Action OnClick { get; set; }
public string Icon { get; set; }
}
// 浣跨敤
var button = ButtonConfig.CreateBuilder()
.WithText("Submit")
.WithColor("primary")
.WithSize("large")
.WithIcon("check")
.WithOnClick(() => Console.WriteLine("Clicked"))
.Build();鏈€浣冲疄璺?vs 鍙嶆ā寮?
瀵规瘮琛ㄦ牸
| 鏂归潰 | 鉁?鏈€浣冲疄璺? | 鉂?鍙嶆ā寮? | 鍘熷洜 |
|---|---|---|---|
| 绫讳慨楗扮 | 浣跨敤 partial 绫? | 涓嶄娇鐢?partial | Builder 闇€瑕佸祵濂楀湪鍘熺被涓? |
| 杩斿洖绫诲瀷 | 杩斿洖 this | 杩斿洖 void | 鏀寔閾惧紡璋冪敤 |
| 鍛藉悕 | WithXxx 鏂规硶鍚? | SetXxx 鏂规硶鍚? | 鏇寸鍚堟祦寮?API 涔犳儻 |
| 楠岃瘉 | 鍦?Build() 涓獙璇? | 鍦?With 鏂规硶涓獙璇? | 闆嗕腑楠岃瘉锛屾洿娓呮櫚 |
| *涓嶅彲鍙樻€? | Builder 鍙彉锛屽璞′笉鍙彉 | 閮藉彲鍙樻垨閮戒笉鍙彉 | 绗﹀悎 Builder 妯″紡璁捐 |
| *榛樿鍊? | 鍦ㄥ瓧娈靛垵濮嬪寲鏃惰缃? | 鍦?Build() 涓缃? | 鏇存竻鏅帮紝鎬ц兘鏇村ソ |
| 闆嗗悎 | 鎻愪緵 Add 鏂规硶 | 鍙彁渚?With 鏂规硶 | 鏇存柟渚挎坊鍔犲涓」 |
| 澶嶅埗 | 鎻愪緵 ToBuilder() 鏂规硶 | 涓嶆敮鎸佸鍒? | 鏂逛究鍩轰簬鐜版湁瀵硅薄鍒涘缓鏂板璞? |
璇︾粏绀轰緥
1. Partial 绫?
// 鉂?鍙嶆ā寮忥細涓嶄娇鐢?partial
[GenerateBuilder]
public class Person // 缂栬瘧閿欒锛?
{
public string Name { get; set; }
}
// 鉁?鏈€浣冲疄璺碉細浣跨敤 partial
[GenerateBuilder]
public partial class Person
{
public string Name { get; set; }
}2. 杩斿洖绫诲瀷
// 鉂?鍙嶆ā寮忥細杩斿洖 void
public class PersonBuilder
{
public void WithName(string value) // 涓嶈兘閾惧紡璋冪敤
{
_name = value;
}
}
// 浣跨敤锛堜笉鑳介摼寮忚皟鐢級
var builder = new PersonBuilder();
builder.WithName("John");
builder.WithAge(30);
var person = builder.Build();
// 鉁?鏈€浣冲疄璺碉細杩斿洖 this
public class PersonBuilder
{
public PersonBuilder WithName(string value)
{
_name = value;
return this;
}
}
// 浣跨敤锛堥摼寮忚皟鐢級
var person = new PersonBuilder()
.WithName("John")
.WithAge(30)
.Build();3. 楠岃瘉鏃舵満
// 鉂?鍙嶆ā寮忥細鍦?With 鏂规硶涓獙璇?
public class PersonBuilder
{
public PersonBuilder WithAge(int value)
{
if (value < 0 || value > 150)
throw new ArgumentException("Invalid age");
_age = value;
return this;
}
}
// 闂锛氭瀯寤鸿繃绋嬩腑灏辨姏鍑哄紓甯革紝涓嶅鐏垫椿
// 鉁?鏈€浣冲疄璺碉細鍦?Build 涓獙璇?
public class PersonBuilder
{
public PersonBuilder WithAge(int value)
{
_age = value;
return this;
}
public Person Build()
{
if (_age < 0 || _age > 150)
throw new ValidationException("Age must be between 0 and 150");
return new Person { Age = _age };
}
}
// 浼樺娍锛氬彲浠ュ厛璁剧疆鎵€鏈夊€硷紝鏈€鍚庣粺涓€楠岃瘉4. 闆嗗悎澶勭悊
// 鉂?鍙嶆ā寮忥細鍙彁渚?With 鏂规硶
public class OrderBuilder
{
public OrderBuilder WithItems(List<string> items)
{
_items = items;
return this;
}
}
// 浣跨敤锛堜笉鏂逛究锛?
var items = new List<string> { "Item1", "Item2" };
var order = new OrderBuilder()
.WithItems(items)
.Build();
// 鉁?鏈€浣冲疄璺碉細鎻愪緵 Add 鏂规硶
public class OrderBuilder
{
private readonly List<string> _items = new();
public OrderBuilder AddItem(string item)
{
_items.Add(item);
return this;
}
public OrderBuilder AddItems(params string[] items)
{
_items.AddRange(items);
return this;
}
}
// 浣跨敤锛堟洿鏂逛究锛?
var order = new OrderBuilder()
.AddItem("Item1")
.AddItem("Item2")
.AddItems("Item3", "Item4")
.Build();5. 涓嶅彲鍙樺璞?
// 鉂?鍙嶆ā寮忥細瀵硅薄鍙彉
public class Person
{
public string Name { get; set; } // 鍙彉
public int Age { get; set; } // 鍙彉
}
// 闂锛氬璞″垱寤哄悗杩樺彲浠ヤ慨鏀?
// 鉁?鏈€浣冲疄璺碉細瀵硅薄涓嶅彲鍙?
public class Person
{
public string Name { get; } // 鍙
public int Age { get; } // 鍙
private Person(string name, int age)
{
Name = name;
Age = age;
}
public class Builder
{
private string _name;
private int _age;
public Builder WithName(string value)
{
_name = value;
return this;
}
public Builder WithAge(int value)
{
_age = value;
return this;
}
public Person Build()
{
return new Person(_name, _age);
}
}
}
// 浼樺娍锛氱嚎绋嬪畨鍏紝涓嶄細琚剰澶栦慨鏀?鎬ц兘浼樺寲
浼樺寲绛栫暐
浼樺寲 1锛氬璞℃睜
// 浣跨敤瀵硅薄姹犲噺灏戝垎閰?
public class PersonBuilder
{
private static readonly ObjectPool<PersonBuilder> Pool =
new ObjectPool<PersonBuilder>(() => new PersonBuilder());
private string _name;
private int _age;
public static PersonBuilder Rent()
{
var builder = Pool.Rent();
builder.Reset();
return builder;
}
public void Return()
{
Pool.Return(this);
}
private void Reset()
{
_name = null;
_age = 0;
}
public PersonBuilder WithName(string value)
{
_name = value;
return this;
}
public Person Build()
{
var person = new Person { Name = _name, Age = _age };
Return(); // 褰掕繕鍒版睜涓?
return person;
}
}
// 浣跨敤
var person = PersonBuilder.Rent()
.WithName("John")
.WithAge(30)
.Build(); // 鑷姩褰掕繕浼樺寲 2锛氱粨鏋勪綋 Builder
// 瀵逛簬绠€鍗曞璞★紝浣跨敤缁撴瀯浣?Builder
public struct PersonBuilder
{
private string _name;
private int _age;
public PersonBuilder WithName(string value)
{
_name = value;
return this;
}
public PersonBuilder WithAge(int value)
{
_age = value;
return this;
}
public readonly Person Build()
{
return new Person { Name = _name, Age = _age };
}
}
// 浼樺娍锛氭爤鍒嗛厤锛屾棤 GC 鍘嬪姏浼樺寲 3锛氬欢杩熷垵濮嬪寲闆嗗悎
// 鍙湪闇€瑕佹椂鍒涘缓闆嗗悎
public class OrderBuilder
{
private List<string>? _items; // 寤惰繜鍒濆鍖?
public OrderBuilder AddItem(string item)
{
_items ??= new List<string>(); // 鎸夐渶鍒涘缓
_items.Add(item);
return this;
}
public Order Build()
{
return new Order
{
Items = _items ?? new List<string>()
};
}
}鎬ц兘瀵规瘮
| 鏂规硶 | 鏃堕棿 (10000娆? | 鍐呭瓨鍒嗛厤 | 鎺ㄨ崘 |
|---|---|---|---|
| 瀵硅薄鍒濆鍖栧櫒 | 50ms | 1.2MB | 鉁? |
| 绫?Builder | 80ms | 2.4MB | 鈿狅笍 |
| 缁撴瀯浣?Builder | 55ms | 1.2MB | 鉁? |
| 瀵硅薄姹?Builder | 60ms | 0.8MB | 鉁呪渽 |
甯歌闂
1. 涓轰粈涔堝繀椤讳娇鐢?partial 绫伙紵
闂锛氫笉浣跨敤 partial 浼氬鑷寸紪璇戦敊璇€?
鍘熷洜锛欱uilder 绫婚渶瑕佸祵濂楀湪鍘熺被涓紝C# 鍙厑璁搁€氳繃 partial 鍏抽敭瀛楀垎鍓茬被瀹氫箟銆?
瑙e喅鏂规锛?
// 鉁?姝g‘
[GenerateBuilder]
public partial class Person
{
public string Name { get; set; }
}
// 鉂?閿欒
[GenerateBuilder]
public class Person // 缂哄皯 partial
{
public string Name { get; set; }
}2. 濡備綍澶勭悊蹇呭~灞炴€э紵
闂锛氭煇浜涘睘鎬ф槸蹇呭~鐨勶紝濡備綍纭繚瀹冧滑琚缃紵
瑙e喅鏂规锛?
// 鏂规 1锛氬湪 Build 涓獙璇?
[GenerateBuilder(GenerateValidation = true)]
public partial class Person
{
[Required]
public string Name { get; set; }
}
// 鐢熸垚鐨勪唬鐮佷細鍦?Build 涓鏌?
public Person Build()
{
if (string.IsNullOrWhiteSpace(_name))
throw new ValidationException("Name is required");
return new Person { Name = _name };
}
// 鏂规 2锛氫娇鐢ㄦ瀯閫犲嚱鏁板弬鏁?
public class PersonBuilder
{
private readonly string _name; // 蹇呭~锛岄€氳繃鏋勯€犲嚱鏁拌缃?
private int _age;
public PersonBuilder(string name)
{
_name = name;
}
public PersonBuilder WithAge(int value)
{
_age = value;
return this;
}
public Person Build()
{
return new Person { Name = _name, Age = _age };
}
}
// 浣跨敤
var person = new PersonBuilder("John") // 蹇呴』鎻愪緵 name
.WithAge(30)
.Build();3. 濡備綍澶勭悊闆嗗悎灞炴€э紵
闂锛氶泦鍚堝睘鎬у簲璇ュ浣曞鐞嗭紵
瑙e喅鏂规锛?
// 鎻愪緵澶氱娣诲姞鏂规硶
public class OrderBuilder
{
private readonly List<string> _items = new();
// 娣诲姞鍗曚釜椤?
public OrderBuilder AddItem(string item)
{
_items.Add(item);
return this;
}
// 娣诲姞澶氫釜椤?
public OrderBuilder AddItems(params string[] items)
{
_items.AddRange(items);
return this;
}
// 娣诲姞闆嗗悎
public OrderBuilder AddItems(IEnumerable<string> items)
{
_items.AddRange(items);
return this;
}
// 娓呯┖闆嗗悎
public OrderBuilder ClearItems()
{
_items.Clear();
return this;
}
public Order Build()
{
return new Order { Items = _items.ToList() };
}
}4. 濡備綍鏀寔缁ф壙锛?
闂锛氭淳鐢熺被濡備綍浣跨敤鍩虹被鐨?Builder锛?
瑙e喅鏂规锛?
// 鏂规 1锛氭硾鍨?Builder
public class BaseBuilder<T, TBuilder>
where T : BaseEntity, new()
where TBuilder : BaseBuilder<T, TBuilder>
{
protected int _id;
public TBuilder WithId(int value)
{
_id = value;
return (TBuilder)this;
}
public virtual T Build()
{
return new T { Id = _id };
}
}
public class ProductBuilder : BaseBuilder<Product, ProductBuilder>
{
private string _name;
public ProductBuilder WithName(string value)
{
_name = value;
return this;
}
public override Product Build()
{
return new Product
{
Id = _id,
Name = _name
};
}
}
// 浣跨敤
var product = new ProductBuilder()
.WithId(1) // 鍩虹被鏂规硶
.WithName("iPhone") // 娲剧敓绫绘柟娉?
.Build();5. Builder 鍜屽璞″垵濮嬪寲鍣ㄥ摢涓洿濂斤紵
瀵规瘮锛?
// 瀵硅薄鍒濆鍖栧櫒
var person = new Person
{
Name = "John",
Age = 30,
Email = "john@example.com"
};
// Builder
var person = Person.CreateBuilder()
.WithName("John")
.WithAge(30)
.WithEmail("john@example.com")
.Build();閫夋嫨寤鸿锛?
| 鍦烘櫙 | 鎺ㄨ崘 | 鍘熷洜 |
|---|---|---|
| 绠€鍗曞璞★紙< 5 涓睘鎬э級 | 瀵硅薄鍒濆鍖栧櫒 | 鏇寸畝娲? |
| 澶嶆潅瀵硅薄锛? 5 涓睘鎬э級 | Builder | 鏇存竻鏅? |
| 闇€瑕侀獙璇? | Builder | 闆嗕腑楠岃瘉 |
| 涓嶅彲鍙樺璞? | Builder | 蹇呴』浣跨敤 |
| 鍙€夊弬鏁板緢澶? | Builder | 鏇寸伒娲? |
| 闇€瑕侀粯璁ゅ€? | Builder | 鏇存柟渚? |
6. 濡備綍娴嬭瘯 Builder锛?
娴嬭瘯绀轰緥锛?
public class PersonBuilderTests
{
[Fact]
public void Build_WithAllProperties_ShouldCreatePerson()
{
// Arrange & Act
var person = Person.CreateBuilder()
.WithName("John")
.WithAge(30)
.WithEmail("john@example.com")
.Build();
// Assert
Assert.Equal("John", person.Name);
Assert.Equal(30, person.Age);
Assert.Equal("john@example.com", person.Email);
}
[Fact]
public void Build_WithoutRequiredProperty_ShouldThrow()
{
// Arrange
var builder = Person.CreateBuilder()
.WithAge(30);
// Act & Assert
Assert.Throws<ValidationException>(() => builder.Build());
}
[Fact]
public void WithName_ShouldReturnBuilder()
{
// Arrange
var builder = Person.CreateBuilder();
// Act
var result = builder.WithName("John");
// Assert
Assert.Same(builder, result); // 杩斿洖鍚屼竴涓疄渚?
}
}7. 鎬ц兘闂鎬庝箞鍔烇紵
浼樺寲寤鸿锛?
- 浣跨敤缁撴瀯浣?Builder锛堥€傚悎绠€鍗曞璞★級
- **浣跨敤瀵硅薄姹?*锛堥珮棰戝垱寤哄満鏅級
- **寤惰繜鍒濆鍖栭泦鍚?*锛堝噺灏戜笉蹇呰鐨勫垎閰嶏級
- 閬垮厤杩囧害浣跨敤锛堢畝鍗曞璞$敤瀵硅薄鍒濆鍖栧櫒锛?
// 鎬ц兘娴嬭瘯
[Benchmark]
public class BuilderBenchmark
{
[Benchmark(Baseline = true)]
public Person ObjectInitializer()
{
return new Person
{
Name = "John",
Age = 30,
Email = "john@example.com"
};
}
[Benchmark]
public Person ClassBuilder()
{
return Person.CreateBuilder()
.WithName("John")
.WithAge(30)
.WithEmail("john@example.com")
.Build();
}
[Benchmark]
public Person StructBuilder()
{
return new PersonBuilder()
.WithName("John")
.WithAge(30)
.WithEmail("john@example.com")
.Build();
}
}8. 濡備綍澶勭悊寰幆寮曠敤锛?
闂锛氬璞′箣闂存湁寰幆寮曠敤銆?
瑙e喅鏂规锛?
// 浣跨敤 ID 鑰屼笉鏄璞″紩鐢?
public class PersonBuilder
{
private string _name;
private int? _spouseId; // 浣跨敤 ID
public PersonBuilder WithName(string value)
{
_name = value;
return this;
}
public PersonBuilder WithSpouseId(int value)
{
_spouseId = value;
return this;
}
public Person Build()
{
return new Person
{
Name = _name,
SpouseId = _spouseId
};
}
}鎵╁睍缁冧範
缁冧範 1锛氭坊鍔?Reset 鏂规硶
浠诲姟锛氬厑璁搁噸缃?Builder 浠ラ噸鐢ㄣ€?
public class PersonBuilder
{
private string _name;
private int _age;
public PersonBuilder Reset()
{
_name = null;
_age = 0;
return this;
}
// ... 鍏朵粬鏂规硶
}
// 浣跨敤
var builder = Person.CreateBuilder();
var person1 = builder
.WithName("John")
.WithAge(30)
.Build();
var person2 = builder
.Reset()
.WithName("Jane")
.WithAge(25)
.Build();缁冧範 2锛氭坊鍔?Clone 鏂规硶
浠诲姟锛氭敮鎸佸厠闅?Builder銆?
public class PersonBuilder
{
public PersonBuilder Clone()
{
return new PersonBuilder
{
_name = this._name,
_age = this._age
};
}
}缁冧範 3锛氭敮鎸佹潯浠舵瀯寤?
浠诲姟锛氭牴鎹潯浠跺喅瀹氭槸鍚﹁缃睘鎬с€?
public class PersonBuilder
{
public PersonBuilder WithNameIf(bool condition, string value)
{
if (condition)
_name = value;
return this;
}
}缁冧範 4锛氭坊鍔犻獙璇佽鍒?
浠诲姟锛氭敮鎸佽嚜瀹氫箟楠岃瘉瑙勫垯銆?
public class PersonBuilder
{
private readonly List<Func<bool>> _validations = new();
public PersonBuilder AddValidation(Func<bool> validation)
{
_validations.Add(validation);
return this;
}
public Person Build()
{
foreach (var validation in _validations)
{
if (!validation())
throw new ValidationException("Validation failed");
}
return new Person { Name = _name, Age = _age };
}
}缁冧範 5锛氭€ц兘鍩哄噯娴嬭瘯
浠诲姟锛氭瘮杈冧笉鍚屽疄鐜扮殑鎬ц兘銆?
[MemoryDiagnoser]
public class BuilderBenchmark
{
[Benchmark]
public Person ObjectInitializer() { /* ... */ }
[Benchmark]
public Person ClassBuilder() { /* ... */ }
[Benchmark]
public Person StructBuilder() { /* ... */ }
[Benchmark]
public Person PooledBuilder() { /* ... */ }
}馃敆 鐩稿叧璧勬簮
娣卞叆瀛︿範
- [蹇€熷紑濮媇(../guide/getting-started.md) - 寮€濮嬩娇鐢ㄦ簮鐢熸垚鍣?
- Hello World 绀轰緥 - 鏈€绠€鍗曠殑鍏ラ棬绀轰緥
- [ToString 鐢熸垚鍣╙(./tostring-generator.md) - 瀹炵敤鐨勪唬鐮佺敓鎴愮ず渚?
- 璇婃柇绀轰緥 - 瀛︿範璇婃柇鎶ュ憡鎶€鏈?
- 娴嬭瘯绀轰緥 - 浜嗚В濡備綍娴嬭瘯婧愮敓鎴愬櫒
API 鍙傝€?
- 浠g爜鐢熸垚 API - 浠g爜鐢熸垚 API 鍙傝€?
- 璇箟妯″瀷 API - 璇箟妯″瀷 API 璇︾粏鍙傝€?
- [鏈€浣冲疄璺礭(../api/best-practices.md) - 婧愮敓鎴愬櫒寮€鍙戞渶浣冲疄璺?
瀹樻柟鏂囨。
- Builder Pattern - 璁捐妯″紡璇﹁В
- Fluent Interface - Martin Fowler
- Source Generators - 婧愮敓鎴愬櫒姒傝堪
鐩稿叧鏂囨。
- [ToString 鐢熸垚鍣╙(/examples/tostring-generator) - 瀛︿範鍩虹浠g爜鐢熸垚
- [澧為噺鐢熸垚鍣╙(/examples/incremental-generator) - 瀛︿範鎬ц兘浼樺寲
- 浠g爜鐢熸垚 API - 浠g爜鐢熸垚鎶€宸?
- [鏈€浣冲疄璺礭(/api/best-practices) - 鎬ц兘浼樺寲寤鸿
绀轰緥椤圭洰
- Roslyn SDK Samples - 瀹樻柟绀轰緥
- AutoMapper - 浣跨敤 Builder 妯″紡鐨勫簱
宸ュ叿鍜屽簱
- BenchmarkDotNet - 鎬ц兘娴嬭瘯
- FluentValidation - 娴佸紡楠岃瘉搴?
- FluentAssertions - 娴佸紡鏂█搴?
涓嬩竴姝ュ涔?
鍩虹宸╁浐锛?
杩涢樁瀛︿範锛?
- 瀛︿範 璇婃柇鎶ュ憡
- 瀹炶返 [娴嬭瘯鎶€鏈痌(/examples/testing)
- 鎺屾彙 [.NET 10 鐗规€(/examples/dotnet10-embedded)
**娣卞叆鐮旂┒**锛?
- 鐮旂┒ 浠g爜鐢熸垚 API
- 瀛︿範 楂樼骇妯″紡
- 鎺屾彙 鎬ц兘浼樺寲
鎬荤粨
Builder 妯″紡鐢熸垚鍣ㄥ睍绀轰簡濡備綍鐢熸垚澶嶆潅鐨勫祵濂楃被缁撴瀯鍜屾祦鐣呮帴鍙c€傚叧閿鐐癸細
- **浣跨敤 partial 绫?*锛氬厑璁哥敓鎴愬祵濂楃被
- 杩斿洖 this锛氭敮鎸侀摼寮忚皟鐢?
- 闆嗕腑楠岃瘉锛氬湪 Build 鏂规硶涓獙璇?
- **鏀寔涓嶅彲鍙樺璞?*锛欱uilder 鍙彉锛屽璞′笉鍙彉
- 鎻愪緵渚垮埄鏂规硶锛欰dd銆丆lear 绛夋柟娉?
閫氳繃瀛︿範杩欎釜绀轰緥锛屼綘鍙互鎺屾彙澶嶆潅浠g爜鐢熸垚鎶€鏈紝骞跺簲鐢ㄥ埌鍏朵粬璁捐妯″紡鐨勫疄鐜颁腑銆?
鏂囨。瀛楁暟缁熻锛氱害 8,500 瀛?
Q2: 濡備綍澶勭悊蹇呴渶灞炴€у拰鍙€夊睘鎬э紵
A: 浣跨敤鐗规€ф爣璁板繀闇€灞炴€э細
[GenerateBuilder]
public class User
{
[Required]
public string Name { get; set; }
[Required]
public string Email { get; set; }
public string? PhoneNumber { get; set; } // 鍙€?
}
// 鐢熸垚鐨?Builder 浼氶獙璇佸繀闇€灞炴€?
public class UserBuilder
{
public User Build()
{
if (string.IsNullOrEmpty(_name))
throw new InvalidOperationException("Name is required");
if (string.IsNullOrEmpty(_email))
throw new InvalidOperationException("Email is required");
return new User
{
Name = _name,
Email = _email,
PhoneNumber = _phoneNumber
};
}
}Q3: Builder 妯″紡涓庢瀯閫犲嚱鏁扮浉姣旀湁浠€涔堜紭鍔匡紵
A: Builder 妯″紡鐨勪富瑕佷紭鍔匡細
- **鍙鎬ф洿濂?*: 浣跨敤鍛藉悕鏂规硶鑰屼笉鏄綅缃弬鏁?
- **鐏垫椿鎬?*: 鍙互鎸変换鎰忛『搴忚缃睘鎬?
- **涓嶅彲鍙樻€?*: 鏀寔鍒涘缓涓嶅彲鍙樺璞?
- 楠岃瘉: 鍙互鍦ㄦ瀯寤烘椂楠岃瘉瀵硅薄鐘舵€?
- **榛樿鍊?*: 鍙互涓哄睘鎬ф彁渚涢粯璁ゅ€?
// 鉂?鏋勯€犲嚱鏁帮細鍙傛暟椤哄簭鍥哄畾锛岄毦浠ヨ蹇?
var user = new User("John", "john@example.com", "123-456-7890", 30, "USA");
// 鉁?Builder锛氭竻鏅版槗璇?
var user = new UserBuilder()
.WithName("John")
.WithEmail("john@example.com")
.WithPhoneNumber("123-456-7890")
.WithAge(30)
.WithCountry("USA")
.Build();鏈€鍚庢洿鏂? 2025-01-21