C#用戶定義類型轉換
- 用於自定義類和結構能夠進行隱式轉換和顯示轉換.例如:將一個自定義類類型轉換成整型,浮點型等,反之亦然.
C#提供隱式轉換和顯式轉換
- 隱式轉換:編譯器自動執行轉換
- 顯式轉換:編譯器只在使用顯式轉換運算符時才執行轉換
聲明隱式轉換的語法如下.注:所有用戶定義轉換必須使用public和static修飾符
public
static
implicit
operator TargetType(SourceType Identifier)
{
...
return ObjectOfTargetType;
}
{
...
return ObjectOfTargetType;
}
TargetType:目標類型
參數Identitfier:源數據
例如,下面代碼使一個int字面量被隱式轉換為LimitedInt對象,反過來LimitedInt也可以隱式轉換成一個int
class LimitedInt
{
const int MaxValue = 100;
const int MinValue = 0;
private int _theValue = 0;
// 屬性
public int TheValue
{
get { return _theValue; }
set
{
if (value < MinValue)
{
_theValue = 0;
}
else
{
_theValue = value > MaxValue ? MaxValue : value;
}
}
}
// 隱式轉換:將LimitedInt對象轉為整型
public static implicit operator int(LimitedInt li)
{
return li.TheValue;
}
// 隱式轉換:將整型轉換為LimitedInt對象
public static implicit operator LimitedInt( int x)
{
LimitedInt li = new LimitedInt();
li.TheValue = x;
return li;
}
}
class Program
{
static void Main( string[] args)
{
LimitedInt li = 500; // 將500轉換為LimitedInt
int value = li; // 將LimitedInt轉換為int
Console.WriteLine( " li:{0},value:{1} ", li.TheValue, value);
Console.ReadKey();
}
{
const int MaxValue = 100;
const int MinValue = 0;
private int _theValue = 0;
// 屬性
public int TheValue
{
get { return _theValue; }
set
{
if (value < MinValue)
{
_theValue = 0;
}
else
{
_theValue = value > MaxValue ? MaxValue : value;
}
}
}
// 隱式轉換:將LimitedInt對象轉為整型
public static implicit operator int(LimitedInt li)
{
return li.TheValue;
}
// 隱式轉換:將整型轉換為LimitedInt對象
public static implicit operator LimitedInt( int x)
{
LimitedInt li = new LimitedInt();
li.TheValue = x;
return li;
}
}
class Program
{
static void Main( string[] args)
{
LimitedInt li = 500; // 將500轉換為LimitedInt
int value = li; // 將LimitedInt轉換為int
Console.WriteLine( " li:{0},value:{1} ", li.TheValue, value);
Console.ReadKey();
}
改代碼輸出結果:li:100,value:100
顯示轉換和強制轉換運算符
前面所講的都是隱式轉換,如果你把運算符implcit改為explicit,你將不得不在實行轉換時顯示使用轉換運算符
代碼片段如下:
//顯示
轉換:將LimitedInt對象轉為整型
public static explicit operator int(LimitedInt li)
{
return li.TheValue;
}
//顯示 轉換:將整型轉換為LimitedInt對象
public static explicit operator LimitedInt( int x)
{
LimitedInt li = new LimitedInt();
li.TheValue = x;
return li;
}
static void Main( string[] args)
{
LimitedInt li = (LimitedInt) 500; // 將500強制轉換為LimitedInt
int value = ( int)li; // 將LimitedInt強制轉換為int
Console.WriteLine( " li:{0},value:{1} ", li.TheValue, value);
Console.ReadKey();
}
public static explicit operator int(LimitedInt li)
{
return li.TheValue;
}
//顯示 轉換:將整型轉換為LimitedInt對象
public static explicit operator LimitedInt( int x)
{
LimitedInt li = new LimitedInt();
li.TheValue = x;
return li;
}
static void Main( string[] args)
{
LimitedInt li = (LimitedInt) 500; // 將500強制轉換為LimitedInt
int value = ( int)li; // 將LimitedInt強制轉換為int
Console.WriteLine( " li:{0},value:{1} ", li.TheValue, value);
Console.ReadKey();
}
