首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在带有接口的C#中进行强制转换,以便能够使用所有对象功能

在带有接口的C#中进行强制转换,以便能够使用所有对象功能
EN

Stack Overflow用户
提问于 2011-11-08 23:11:18
回答 6查看 133关注 0票数 3

我在C#中转换我的对象时遇到了一点问题,这样除了在接口中声明的方法之外,我还可以使用其他的对象方法。下面是我所说的一个简单的例子。

代码语言:javascript
运行
复制
public interface IShape
{
    void Print();
}

public class Square : IShape
{
    #region IShape Members

    public void Print()
    {
        HttpContext.Current.Response.Write("Square Print Called"); 
    }   

    #endregion

    public void PrintMore()
    {
        HttpContext.Current.Response.Write("Square Print More Called"); 
    }        
}

为什么当下面的代码被调用时,我无法访问PrintMore()?

代码语言:javascript
运行
复制
IShape s = (Square)shape;
s.PrintMore() // This is not available. only Print() is. 

有什么帮助和解释会有帮助吗?

EN

Stack Overflow用户

发布于 2011-11-08 23:15:22

因为当您尝试使用时,s.PrintMore() "s“的类型是IShape,所以它只知道接口函数。你需要做像这样的事情

代码语言:javascript
运行
复制
Square s = (Square)shape;  
s.PrintMore();

代码语言:javascript
运行
复制
((Square)shape).PrintMore(); // assuming you're positive its a Square type

可以把接口想象成对象上的包装器,它只公开接口中定义的函数。它们仍然在那里,如果没有转换到适当的对象,您就无法访问它们。

票数 1
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8052594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档