c# - 用作变量的类型

时间:2012-09-30 20:46:31

标签: c#

我有一个简单的业务经理外观,应该只保留一些库存信息。但是我不断收到“Home.Services.InventorySvc”是一个用作变量的类型的错误。

我的门面密码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Home.Domain;
using Home.Services;

namespace Home.Business
{
    public class InventoryMngr
    {
        public void Create(CreateInventory inv) 
        {
            Factory factory = Factory.GetInstance();
            InventorySvc invSvc =
            (InventorySvc)factory.GetService(
            (InventorySvc).Name);
            invSvc.CreateInventory(inv);
        }
    }
} 

InventorySvc代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Home;
using Home.Domain;

namespace Home.Services
{
    public interface InventorySvc : IService
    {
        void CreateInventory(CreateInventory createinventory);
    }
}

2 个答案:

答案 0 :(得分:3)

您使用的(InventorySvc).NameInventorySvc.Name相同,因此可以访问InventorySvc类的静态成员。因为它不是一个类而是一个接口,所以它不能有静态成员。

答案 1 :(得分:1)

InventorySvc invSvc = (InventorySvc)factory.GetService((InventorySvc).Name);

此代码应检索实现InventorySvc的类型的实例。但是,看起来您正在尝试传递该类型的实例,这是没有意义的 - 语法错误,您还没有实例化该类型。据推测,您甚至不知道特定类型,只是界面类型。工厂和界面已经抽象了实现(通常是一件好事)。

在你的例子中,工厂可能希望将类型的名称作为字符串(我不会通过辩论,如果这是一件好事而不会使答案过于复杂)。作为回报,工厂将实例化一个实现InventorySvc的实例并将其返回。只有这样才能调用实例成员,例如“Name”属性。

作为旁注,接口名称为should start with an I in c#,例如IInventorySvc。这使得您和任何读取代码的人都更加清楚它是一个接口。

另见:https://stackoverflow.com/a/681815/453277