更新:2007 年 11 月
数据生成器的抽象基类。
命名空间:  Microsoft.VisualStudio.TeamSystem.Data.DataGenerator
程序集:  Microsoft.VisualStudio.TeamSystem.Data(在 Microsoft.VisualStudio.TeamSystem.Data.dll 中)
语法
声明
<GeneratorAttribute(GetType(DefaultGeneratorDesigner))> _
<CLSCompliantAttribute(True)> _
Public MustInherit Class Generator _
    Implements IGenerator, IDisposable
用法
Dim instance As Generator
[GeneratorAttribute(typeof(DefaultGeneratorDesigner))]
[CLSCompliantAttribute(true)]
public abstract class Generator : IGenerator, 
    IDisposable
[GeneratorAttribute(typeof(DefaultGeneratorDesigner))]
[CLSCompliantAttribute(true)]
public ref class Generator abstract : IGenerator, 
    IDisposable
public abstract class Generator implements IGenerator, IDisposable
备注
如果标准数据生成器不能满足需要,您可以创建自定义数据生成器。若要创建自定义数据生成器,必须创建一个实现 IGenerator 的类或从 Generator 继承的类。您可以通过使用 GeneratorAttribute 修饰该类来将其标识为数据生成器。
您可以为自定义数据生成器创建自定义设计器,也可以使用 DefaultGeneratorDesigner。
基类实现构造基于标记为 OutputAttribute 的公共属性的输出。输入是使用 InputAttribute 设置的。使用通过属性 (Attribute) 标记的属性 (Property) 可提供一个用于声明强类型输入和输出值的简单机制。
示例
标准数据生成器无法生成满足某些 CHECK 约束的数据。例如,如果某一 CHECK 约束要求日期位于两个不同范围中的一个范围内,则您无法使用标准 DateTime 生成器。此示例创建一个能够满足类似约束的自定义数据生成器。该生成器接受两个不同的范围作为其输入,并生成一个位于其中一个范围内的随机日期。有关更多信息,请参见演练:为 CHECK 约束创建自定义数据生成器。
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.VisualStudio.TeamSystem.Data.DataGenerator;
namespace GeneratorDateRangesCS
{
    public class GeneratorDateRangesCS : Generator
    {
        DateTime mRange1Min;
        DateTime mRange1Max;
        DateTime mRange2Min;
        DateTime mRange2Max;
        [Input]
        public DateTime Range1Min
        {
            set {mRange1Min = value;}
        }
        [Input]
        public DateTime Range1Max
        {
            set {mRange1Max = value;}
        }
        [Input]
        public DateTime Range2Min
        {
            set {mRange2Min = value;}
        }
        [Input]
        public DateTime Range2Max
        {
            set {mRange2Max = value;}
        }
        DateTime mRandomDate;
        [Output]
        public DateTime RandomDate
        {
            get {return mRandomDate;}
        }
        Random mRandom;
        Random mRandomRange;
        protected override void OnInitialize(GeneratorInit initInfo)
        {
            mRandom = new Random(this.Seed);       //deterministic
            mRandomRange = new Random(this.Seed);  //deterministic
            //mRandom = new Random();                //non-deterministic
            //mRandomRange = new Random();           //non-deterministic
            base.OnInitialize(initInfo);
        }
        protected override void OnGenerateNextValues()
        {
            DateTime min;
            DateTime max;
            //Generate a random date from either range 1 or range 2.
            //Randomly select either range 1 or range 2 by randomly 
            //generating an odd or an even random number.
            //------------------------------------------------------------
            if (mRandomRange.Next() % 2 == 0)  //check for odd or even
            {
                min = mRange1Min;
                max = mRange1Max;
            }
            else
            {
                min = mRange2Min;
                max = mRange2Max;
            }
            //The formula for creating a random number in a specific range is:
            //start of range + (size of range * random number between 0 and 1)
            //size of range
            TimeSpan range = max - min;
            //(size of range * random number between 0 and 1)
            TimeSpan randomNumber = new TimeSpan((long)(range.Ticks * mRandom.NextDouble()));
            //start of range + (size of range * random number between 0 and 1)
            mRandomDate = min + randomNumber;
        }
    }//end class
}//end namespace
Imports Microsoft.VisualStudio.TeamSystem.Data.DataGenerator
Public Class GeneratorDateRangesVB
    Inherits Generator
    Dim mRange1Min As Date
    Dim mRange1Max As Date
    Dim mRange2Min As Date
    Dim mRange2Max As Date
    <Input()> _
    Public WriteOnly Property Range1Min() As Date
        Set(ByVal value As Date)
            mRange1Min = value
        End Set
    End Property
    <Input()> _
    Public WriteOnly Property Range1Max() As Date
        Set(ByVal value As Date)
            mRange1Max = value
        End Set
    End Property
    <Input()> _
    Public WriteOnly Property Range2Min() As Date
        Set(ByVal value As Date)
            mRange2Min = value
        End Set
    End Property
    <Input()> _
    Public WriteOnly Property Range2Max() As Date
        Set(ByVal value As Date)
            mRange2Max = value
        End Set
    End Property
    Dim mRandomDate As Date
    <Output()> _
    Public ReadOnly Property RandomDate() As Date
        Get
            Return mRandomDate
        End Get
    End Property
    Dim mRandom As Random
    Dim mRandomRange As Random
    Protected Overrides Sub OnInitialize(ByVal initInfo As GeneratorInit)
        mRandom = New Random(Me.Seed)       'deterministic
        mRandomRange = New Random(Me.Seed)  'deterministic
        'mRandom = New Random()              'non-deterministic
        'mRandomRange = New Random()         'non-deterministic
        MyBase.OnInitialize(initInfo)
    End Sub
    Protected Overrides Sub OnGenerateNextValues()
        Dim min As Date
        Dim max As Date
        'Generate a random date from either range 1 or range 2.
        'Randomly select either range 1 or range 2 by randomly 
        'generating an odd or an even random number.
        '------------------------------------------------------------
        If mRandomRange.Next() Mod 2 = 0 Then  'check for odd or even
            min = mRange1Min
            max = mRange1Max
        Else
            min = mRange2Min
            max = mRange2Max
        End If
        'The formula for creating a random number in a specific range is:
        'start of range + (size of range * random number between 0 and 1)
        'size of range
        Dim range As TimeSpan = max - min
        '(size of range * random number between 0 and 1)
        Dim randomNumber As TimeSpan = New TimeSpan(CLng(range.Ticks * mRandom.NextDouble()))
        'start of range + (size of range * random number between 0 and 1)
        mRandomDate = min + randomNumber
    End Sub
End Class
继承层次结构
System.Object
  Microsoft.VisualStudio.TeamSystem.Data.DataGenerator.Generator
    Microsoft.VisualStudio.TeamSystem.Data.Generators.Bit
    Microsoft.VisualStudio.TeamSystem.Data.Generators.DatabaseDateTime
    Microsoft.VisualStudio.TeamSystem.Data.Generators.DatabaseGuid
    Microsoft.VisualStudio.TeamSystem.Data.Generators.DataBoundGenerator
    Microsoft.VisualStudio.TeamSystem.Data.Generators.Image
    Microsoft.VisualStudio.TeamSystem.Data.Generators.Numeric<T>
    Microsoft.VisualStudio.TeamSystem.Data.Generators.RegexString
    Microsoft.VisualStudio.TeamSystem.Data.Generators.VarBinary
线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。
另请参见
参考
Microsoft.VisualStudio.TeamSystem.Data.DataGenerator 命名空间