C#实现和转换接口
Ive是一个实现IMARCA接口的类:C#实现和转换接口,c#,C#,Ive是一个实现IMARCA接口的类: public class BaseQuestao : IMarcas { public string TxtMarca { get; set; } } 其中TxtMarca属性是来自该接口的赋值 问题是,当我尝试执行以下代码时,表示BasesQuestao不是IMARCA: BaseQuestao bs = new BaseQuestao(
public class BaseQuestao : IMarcas
{
public string TxtMarca
{
get;
set;
}
}
其中TxtMarca属性是来自该接口的赋值
问题是,当我尝试执行以下代码时,表示BasesQuestao不是IMARCA:
BaseQuestao bs = new BaseQuestao();
IMarcas brand = bs as IMarcas;
if (brand != null)
{
bs.TxtMarca = "voila";
}
有什么想法吗?在您将
bs
转换为IMarcas
作为brand
,然后检查bs
是否为空,而不是brand
。您应该检查brand
是否为空,以查看强制转换是否成功
除此之外,它应该工作得很好。如果仍然不起作用,请发布更多代码/上下文。试试看
if (brand != null)
正如其他人所说,您使用了错误的变量(
bs
,而不是brand
)——但这两种方法都会奏效
下面是一个已更正代码的示例:
using System;
public interface IMarcas
{
string TxtMarca { get; set; }
}
public class BaseQuestao : IMarcas
{
public string TxtMarca
{
get;
set;
}
}
class Test
{
static void Main()
{
BaseQuestao bs = new BaseQuestao();
IMarcas brand = bs as IMarcas;
if (brand != null)
{
brand.TxtMarca = "voila";
Console.WriteLine("Done");
}
}
}
即使使用原始代码:
if (bs != null)
{
bs.TxtMarca = "voila";
Console.WriteLine("Done");
}
。。。它仍然很好。检查你的代码,因为上面的代码很好你不应该检查bs是否为空,你应该检查brand。一个简短但完整的程序演示这个问题确实会有帮助,因为上面的代码很好。也许接口没有声明为公共的?上面的代码很好,问题一定出在其他地方。要寻找的最明显的东西包括:未声明为公共的接口。命名空间问题,缺少引用。请张贴整个代码,包括接口的定义。我很抱歉,即使检查品牌变量,它仍然说这是NULL@user257234:我的工作示例包括您发布的所有代码,这意味着它必须位于您未发布的某些代码中。请拿出一个类似的简短但完整的程序,但这个程序确实失败了。你能单步调试并观看它的运行吗?在某个时刻,你的bs不知何故被设置为null。您发布的代码不足以让我们确定发生了什么。