ASP.NET 2.0和Avalon都使用了Partial Class. 这样用户的代码和工具生成的代码可以共同组成一个Class.对Partial Type的支持来自编译器. 4个要点如下:
- 我们把partial 叫做modifier而不是关键字.
- 同一类型在不同文件里面都需要使用partial
- 可以只在一个文件,两个文件,或者更多文件中使用partial
- Base class只需要声明一次;若多次声明必需完全一致.
例子:
Contact1.cs
using
System; 
namespace
Realize.Net.Potential.Sample1 

...
{
public partial class Contact

...{
public Contact(string firstName, string lastName)

...{
this.firstName = firstName;
this.lastName = lastName;
}

int partial = 0;
private void PartialIsNotAKeyword()

...{
partial++;
}
}

public partial class AdvancedContact: Contact

...{
public AdvancedContact(string firstName, string lastName, string address) : base(firstName, lastName)

...{
this.address = address;
}
}
}
Contact2.cs
using
System; 
namespace
Realize.Net.Potential.Sample1 

...
{
public partial class Contact

...{
string firstName;
string lastName;
}
}
Contact3.cs
using
System; 
namespace
Realize.Net.Potential.Sample1 

...
{
public partial class Contact

...{
public virtual string Name

...{

get ...{ return firstName + " " + lastName; }
}
}

public partial class AdvancedContact

...{
string address;
public override string Name

...{
get

...{
return base.Name + " at " + address;
}
}
}
}
using
System; 
namespace
Realize.Net.Potential.Sample1 

...
{
public class MainFunc

...{
[STAThread]
static int Main (string[] args)

...{
Contact contact = new Contact("Zhanbo", "Sun");
Console.WriteLine(contact.Name);
AdvancedContact advContact = new AdvancedContact("Zhanbo", "Sun", " 1 Microsoft Way ");
Console.WriteLine(advContact.Name);
return 0;
}
}
}

Contact1.cs
using
System; 
namespace
Realize.Net.Potential.Sample1 

...
{
public partial class Contact 
...{
public Contact(string firstName, string lastName) 
...{
this.firstName = firstName;
this.lastName = lastName;
} 
int partial = 0;
private void PartialIsNotAKeyword() 
...{
partial++;
}
} 
public partial class AdvancedContact: Contact 
...{
public AdvancedContact(string firstName, string lastName, string address) : base(firstName, lastName) 
...{
this.address = address;
}
}
}
using
System; 
namespace
Realize.Net.Potential.Sample1 

...
{
public partial class Contact 
...{
string firstName;
string lastName;
}
}
using
System; 
namespace
Realize.Net.Potential.Sample1 

...
{
public partial class Contact 
...{
public virtual string Name 
...{ 
get ...{ return firstName + " " + lastName; }
}
} 
public partial class AdvancedContact 
...{
string address;
public override string Name 
...{
get 
...{
return base.Name + " at " + address;
}
}
}
}
MainFun.cs
using
System; 
namespace
Realize.Net.Potential.Sample1 

...
{
public class MainFunc 
...{
[STAThread]
static int Main (string[] args) 
...{
Contact contact = new Contact("Zhanbo", "Sun");
Console.WriteLine(contact.Name);
AdvancedContact advContact = new AdvancedContact("Zhanbo", "Sun", " 1 Microsoft Way ");
Console.WriteLine(advContact.Name);
return 0;
}
}
}

To Compile:
csc /out:MySample1.exe /t:exe *.cs
深入了解Generics, iterators, anonymous methods, and partial classes的最佳读本就是更新的
C#2.0Specification.
本文详细介绍了C# 2.0中的Partial Class特性及其使用方式,包括如何在多个文件中定义同一个类的不同部分,并展示了具体的代码示例。
2万+

被折叠的 条评论
为什么被折叠?



