“使用未分配的局部变量”错误与接口

时间:2012-07-09 20:03:50

标签: c# interface null

我遇到了一些语法问题。我对界面并不熟悉,请原谅我的无知。

VS2010在... application.Name = System.AppDomain.CurrentDomain.FriendlyName;

给我一​​个错误
public static void AddApplication(string applicationName = null, string processImageFileName = null)
{
    INetFwAuthorizedApplications applications;
    INetFwAuthorizedApplication application;

    if(applicationName == null)
    {
        application.Name = System.AppDomain.CurrentDomain.FriendlyName;/*set the name of the application */
    }
    else
    {
        application.Name = applicationName;/*set the name of the application */
    }

    if (processImageFileName == null)
    {
        application.ProcessImageFileName = System.Reflection.Assembly.GetExecutingAssembly().Location; /* set this property to the location of the executable file of the application*/
    }
    else
    {
        application.ProcessImageFileName = processImageFileName; /* set this property to the location of the executable file of the application*/
    }

    application.Enabled =  true; //enable it

    /*now add this application to AuthorizedApplications collection */
    Type NetFwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false); 
    INetFwMgr mgr = (INetFwMgr)Activator.CreateInstance(NetFwMgrType); 
    applications = (INetFwAuthorizedApplications)mgr.LocalPolicy.CurrentProfile.AuthorizedApplications;
    applications.Add(application);
}

我可以通过将application设置为null来消除此错误,但这会导致运行时空引用错误。

编辑:

这是我正在调整代码的地方。我希望它能提供更多背景信息 http://blogs.msdn.com/b/securitytools/archive/2009/08/21/automating-windows-firewall-settings-with-c.aspx

2 个答案:

答案 0 :(得分:8)

你永远不会初始化

application

在此之前使用它:

application.Name = System.AppDomain.CurrentDomain.FriendlyName;

变量应用程序定义为:

INetFwAuthorizedApplication application

您需要分配实现接口INetFwAuthorizedApplication的类的实例。

在某个地方,项目中必须有一个(或可能更多)类看起来像这样:

public class SomeClass : INetFwAuthorizedApplication
{
    // ...
}

public class AnotherClass : INetFwAuthorizedApplication
{
    // ...
}

您需要确定应该使用哪个类(SomeClass,AnotherClass)然后分配适当的对象,例如像这样:

INetFwAuthorizedApplication application = new SomeClass();

答案 1 :(得分:1)

接口用于描述对象的作用,而不是具体的作用。要加入“真实世界”术语,界面可能如下:

使用ISmallerThanABreadbox方法

FitIntoBreadbox()。我不能要求你给我“小于面包箱”......因为这没有任何意义。我只能请你给我一些“小于面包箱”的东西。你必须想出你自己的对象,在它上面有接口是有意义的。苹果比面包箱小,所以如果你的面包箱只能容纳比它小的物品,那么苹果就是ISmallerThanABreadbox界面的理想选择。

另一个例子是IGraspableHold()方法和FitsInPocket bool属性。你可以要求给你一些可以抓住的东西,这些东西可能放在你的口袋里,也可能放在口袋里,但是你不能要求“可以抓住”。

希望有帮助...