INameCreationService Interface
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt een service die unieke namen voor objecten kan genereren.
public interface class INameCreationService
public interface INameCreationService
type INameCreationService = interface
Public Interface INameCreationService
- Afgeleid
Voorbeelden
De volgende voorbeeldcode biedt een voorbeeld INameCreationService van een implementatie. De service kan een unieke naam maken op basis van een type dat niet overeenkomt met namen in de opgegeven container. Er kan ook een opgegeven naamtekenreeks worden gevalideerd.
#using <System.dll>
using namespace System;
using namespace System::ComponentModel::Design;
using namespace System::ComponentModel::Design::Serialization;
using namespace System::Globalization;
namespace NameCreationServiceExample
{
public ref class NameCreationService: public System::ComponentModel::Design::Serialization::INameCreationService
{
public:
NameCreationService(){}
// Creates an identifier for a particular data type that does not conflict
// with the identifiers of any components in the specified collection.
virtual String^ CreateName( System::ComponentModel::IContainer^ container, System::Type^ dataType )
{
// Create a basic type name string.
String^ baseName = dataType->Name;
int uniqueID = 1;
bool unique = false;
// Continue to increment uniqueID numeral until a
// unique ID is located.
while ( !unique )
{
unique = true;
// Check each component in the container for a matching
// base type name and unique ID.
for ( int i = 0; i < container->Components->Count; i++ )
{
// Check component name for match with unique ID string.
if ( container->Components[ i ]->Site->Name->StartsWith( String::Concat( baseName, uniqueID ) ) )
{
// If a match is encountered, set flag to recycle
// collection, increment ID numeral, and restart.
unique = false;
uniqueID++;
break;
}
}
}
return String::Concat( baseName, uniqueID );
}
// Returns whether the specified name contains
// all valid character types.
virtual bool IsValidName( String^ name )
{
for ( int i = 0; i < name->Length; i++ )
{
Char ch = name[ i ];
UnicodeCategory uc = Char::GetUnicodeCategory( ch );
switch ( uc )
{
case UnicodeCategory::UppercaseLetter:
case UnicodeCategory::LowercaseLetter:
case UnicodeCategory::TitlecaseLetter:
case UnicodeCategory::DecimalDigitNumber:
break;
default:
return false;
}
}
return true;
}
// Throws an exception if the specified name does not contain
// all valid character types.
virtual void ValidateName( String^ name )
{
for ( int i = 0; i < name->Length; i++ )
{
Char ch = name[ i ];
UnicodeCategory uc = Char::GetUnicodeCategory( ch );
switch ( uc )
{
case UnicodeCategory::UppercaseLetter:
case UnicodeCategory::LowercaseLetter:
case UnicodeCategory::TitlecaseLetter:
case UnicodeCategory::DecimalDigitNumber:
break;
default:
throw gcnew Exception( String::Format( "The name '{0}' is not a valid identifier.", name ) );
}
}
}
};
}
using System;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Globalization;
namespace NameCreationServiceExample
{
public class NameCreationService : System.ComponentModel.Design.Serialization.INameCreationService
{
public NameCreationService()
{
}
// Creates an identifier for a particular data type that does not conflict
// with the identifiers of any components in the specified collection.
public string CreateName(System.ComponentModel.IContainer container, System.Type dataType)
{
// Create a basic type name string.
string baseName = dataType.Name;
int uniqueID = 1;
bool unique = false;
// Continue to increment uniqueID numeral until a
// unique ID is located.
while( !unique )
{
unique = true;
// Check each component in the container for a matching
// base type name and unique ID.
for(int i=0; i<container.Components.Count; i++)
{
// Check component name for match with unique ID string.
if( container.Components[i].Site.Name.StartsWith(baseName+uniqueID.ToString()) )
{
// If a match is encountered, set flag to recycle
// collection, increment ID numeral, and restart.
unique = false;
uniqueID++;
break;
}
}
}
return baseName+uniqueID.ToString();
}
// Returns whether the specified name contains
// all valid character types.
public bool IsValidName(string name)
{
for(int i = 0; i < name.Length; i++)
{
char ch = name[i];
UnicodeCategory uc = Char.GetUnicodeCategory(ch);
switch (uc)
{
case UnicodeCategory.UppercaseLetter:
case UnicodeCategory.LowercaseLetter:
case UnicodeCategory.TitlecaseLetter:
case UnicodeCategory.DecimalDigitNumber:
break;
default:
return false;
}
}
return true;
}
// Throws an exception if the specified name does not contain
// all valid character types.
public void ValidateName(string name)
{
for(int i = 0; i < name.Length; i++)
{
char ch = name[i];
UnicodeCategory uc = Char.GetUnicodeCategory(ch);
switch (uc)
{
case UnicodeCategory.UppercaseLetter:
case UnicodeCategory.LowercaseLetter:
case UnicodeCategory.TitlecaseLetter:
case UnicodeCategory.DecimalDigitNumber:
break;
default:
throw new Exception("The name '"+name+"' is not a valid identifier.");
}
}
}
}
}
Imports System.ComponentModel.Design
Imports System.ComponentModel.Design.Serialization
Imports System.Globalization
Public Class NameCreationService
Implements System.ComponentModel.Design.Serialization.INameCreationService
Public Sub New()
End Sub
' Creates an identifier for a particular data type that does not conflict
' with the identifiers of any components in the specified collection
Public Function CreateName(ByVal container As System.ComponentModel.IContainer, ByVal dataType As System.Type) As String Implements INameCreationService.CreateName
' Create a basic type name string
Dim baseName As String = dataType.Name
Dim uniqueID As Integer = 1
Dim unique As Boolean = False
' Continue to increment uniqueID numeral until a unique ID is located.
While Not unique
unique = True
' Check each component in the container for a matching
' base type name and unique ID.
Dim i As Integer
For i = 0 To container.Components.Count - 1
' Check component name for match with unique ID string.
If container.Components(i).Site.Name.StartsWith((baseName + uniqueID.ToString())) Then
' If a match is encountered, set flag to recycle
' collection, increment ID numeral, and restart.
unique = False
uniqueID += 1
Exit For
End If
Next i
End While
Return baseName + uniqueID.ToString()
End Function
' Returns whether the specified name contains
' all valid character types.
Public Function IsValidName(ByVal name As String) As Boolean Implements INameCreationService.IsValidName
Dim i As Integer
For i = 0 To name.Length - 1
Dim ch As Char = name.Chars(i)
Dim uc As UnicodeCategory = [Char].GetUnicodeCategory(ch)
Select Case uc
Case UnicodeCategory.UppercaseLetter, UnicodeCategory.LowercaseLetter, UnicodeCategory.TitlecaseLetter, UnicodeCategory.DecimalDigitNumber
Case Else
Return False
End Select
Next i
Return True
End Function
' Throws an exception if the specified name does not contain
' all valid character types.
Public Sub ValidateName(ByVal name As String) Implements INameCreationService.ValidateName
Dim i As Integer
For i = 0 To name.Length - 1
Dim ch As Char = name.Chars(i)
Dim uc As UnicodeCategory = [Char].GetUnicodeCategory(ch)
Select Case uc
Case UnicodeCategory.UppercaseLetter, UnicodeCategory.LowercaseLetter, UnicodeCategory.TitlecaseLetter, UnicodeCategory.DecimalDigitNumber
Case Else
Throw New Exception("The name '" + name + "' is not a valid identifier.")
End Select
Next i
End Sub
End Class
Opmerkingen
A DesignerLoader kan deze service implementeren om een ontwerpfunctie een manier te bieden voor het maken van nieuwe, unieke namen voor objecten. Als deze service niet beschikbaar is, gebruikt de ontwerper een standaard implementatie.
Methoden
| Name | Description |
|---|---|
| CreateName(IContainer, Type) |
Hiermee maakt u een nieuwe naam die uniek is voor alle onderdelen in de opgegeven container. |
| IsValidName(String) |
Hiermee wordt een waarde opgehaald die aangeeft of de opgegeven naam geldig is. |
| ValidateName(String) |
Hiermee wordt een waarde opgehaald die aangeeft of de opgegeven naam geldig is. |