C# 值类型如何实现接口类型?
在C语言规范v5.0的第1.3节中,它说: 接口类型的内容可以是null引用,即对 实现该接口类型的类类型的实例,或 对值类型的装箱值的引用,该值类型实现 接口类型 我对其中三分之二的陈述没有异议。然而,最后一个让我困惑。接口类型如何保存实现该接口类型的值类型的装箱值?我以为值类型不能实现接口类型?还是说装箱的值实现了接口类型?如果是这样,装箱的值如何实现接口类型 我在理解所有这些方面有点困难。值类型(C# 值类型如何实现接口类型?,c#,interface,value-type,boxing,C#,Interface,Value Type,Boxing,在C语言规范v5.0的第1.3节中,它说: 接口类型的内容可以是null引用,即对 实现该接口类型的类类型的实例,或 对值类型的装箱值的引用,该值类型实现 接口类型 我对其中三分之二的陈述没有异议。然而,最后一个让我困惑。接口类型如何保存实现该接口类型的值类型的装箱值?我以为值类型不能实现接口类型?还是说装箱的值实现了接口类型?如果是这样,装箱的值如何实现接口类型 我在理解所有这些方面有点困难。值类型(struct)可以实现接口。它不能继承另一个结构,但可以实现接口 结构可以实现接口,但不能从
struct
)可以实现接口。它不能继承另一个结构
,但可以实现接口
结构可以实现接口,但不能从另一个结构继承。因此,结构成员不能声明为受保护
因此,当您有一个实现i接口的struct
时,您可以执行以下操作:
var value = new MyStruct();
var valueAsInterface = (IInterface)value;
valueAsInterface
包含对实现该接口类型的值类型的装箱值的引用。没有任何东西表明值类型不能实现接口
以下代码完全合法:
interface ITest
{
void DoSomething();
}
struct MyTest : ITest
{
public void DoSomething()
{
// do something
}
}
以下是一个例子:
interface DisplayMsg
{
void ShowMsg();
}
/// <summary>
/// Interface implemented by Struct
/// </summary>
struct StructDisplayMsg : DisplayMsg
{
public void ShowMsg()
{
Console.WriteLine("Inside struct Showmsg:");
}
}
/// <summary>
/// Interface implemented by Class
/// </summary>
class ObjectDisplayMsg:DisplayMsg
{
public int Integer { get; set; }
public void ShowMsg()
{
Console.WriteLine("Inside Object ShowMsg:{0}", Integer);
}
/// <summary>
/// Implicit operator for boxing value type to object
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static implicit operator ObjectDisplayMsg(int value)
{
ObjectDisplayMsg classObject = new ObjectDisplayMsg();
classObject.Integer = value;
return classObject;
}
}
private void CheckConcepts()
{
StructDisplayMsg localDisplay = new StructDisplayMsg();
localDisplay.ShowMsg();
int localInteger = 10;
/* Boxing of the integer type to Object */
ObjectDisplayMsg intobject = (ObjectDisplayMsg)localInteger;
intobject.ShowMsg();
Console.ReadKey();
}
界面显示msg
{
void ShowMsg();
}
///
///由Struct实现的接口
///
structStructDisplayMsg:DisplayMsg
{
public void ShowMsg()
{
Console.WriteLine(“内部结构Showmsg:”);
}
}
///
///类实现的接口
///
类ObjectDisplayMsg:DisplayMsg
{
公共整数{get;set;}
public void ShowMsg()
{
WriteLine(“内部对象ShowMsg:{0}”,整数);
}
///
///用于将值类型装箱到对象的隐式运算符
///
///
///
公共静态隐式运算符ObjectDisplayMsg(int值)
{
ObjectDisplayMsg classObject=新的ObjectDisplayMsg();
整型=值;
返回类对象;
}
}
私有void CheckConcepts()
{
StructDisplayMsg localDisplay=新建StructDisplayMsg();
localDisplay.ShowMsg();
int localInteger=10;
/*将整型装箱到对象*/
ObjectDisplayMsg InObject=(ObjectDisplayMsg)localInteger;
intobject.ShowMsg();
Console.ReadKey();
}
您能不能说i接口值接口=值
?可以。不会有任何区别(除非在结构中重写了cast运算符)。为什么需要框选实现接口类型的值类型?所有这些行话让我头晕目眩。每次你把它传递给一个需要接口的方法时,它都会被装箱。当显式实现接口时,您也会发现它是有用的。字体它是否使用full?这是什么意思?这是一个很好的问题