C# 接口对象始终为空

C# 接口对象始终为空,c#,asp.net,interface,nullreferenceexception,C#,Asp.net,Interface,Nullreferenceexception,我从“PersonFunctionality”界面创建了“PersonFunctionality”对象。 该接口有一个保存个人详细信息的方法。问题是PersonFunctionality总是有一个空值 public PersonFuntionality personFuntionality; try { List<beans.Person> prsn = new List<beans.Person>();

我从“PersonFunctionality”界面创建了“PersonFunctionality”对象。 该接口有一个保存个人详细信息的方法。问题是PersonFunctionality总是有一个空值

public PersonFuntionality personFuntionality;



 try
            {
                List<beans.Person> prsn = new List<beans.Person>();

                beans.Person psn = new beans.Person();

                psn.PersonId = Convert.ToInt32(txtId.Text.Trim());
                psn.PersonName = txtName.Text.Trim();
                psn.PersonCity = txtCity.Text.Trim();

                prsn.Add(psn);

                //prsn.PersonId = Convert.ToInt32(txtId.Text.Trim());
                //prsn.PersonName = txtName.Text.Trim();
                //prsn.PersonCity = txtCity.Text.Trim();

                if (personFuntionality != null)
                {
                    bool success = personFuntionality.SavePersonDetails(prsn);

                    if (success == true)
                    {
                        lblResult.Text = "success";
                    }
                    else
                    {
                        lblResult.Text = "Failed";
                    }
                }
                else
                {
                    lblResult.Text = "Object Null";
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
公共人格功能性;
尝试
{
List prsn=新列表();
beans.Person psn=新bean.Person();
psn.PersonId=Convert.ToInt32(txtId.Text.Trim());
psn.PersonName=txtName.Text.Trim();
psn.PersonCity=txtCity.Text.Trim();
prsn.Add(psn);
//prsn.PersonId=Convert.ToInt32(txtId.Text.Trim());
//prsn.PersonName=txtName.Text.Trim();
//prsn.PersonCity=txtCity.Text.Trim();
if(personFunctionality!=null)
{
bool success=personFunctionality.SavePersonDetails(prsn);
if(success==true)
{
lblResult.Text=“成功”;
}
其他的
{
lblResult.Text=“失败”;
}
}
其他的
{
lblResult.Text=“对象为空”;
}
}
捕获(例外情况除外)
{
抛出新异常(例如消息);
}

您从未在give代码中实例化过
PersonFunctionality
对象,只是声明了它。您可以将其实例化为。我假设您为实现PersonFunctionality接口的类
PersonFunctionalityImlementClass
拥有无参数构造函数

public PersonFuntionality personFuntionality = new  PersonFuntionalityImlementorClass();
您具有接口引用PersonFunctionality。您必须为其分配一个实现者类对象

接口仅包含方法、属性、, 事件或索引器。实现接口的类或结构 必须实现在中指定的接口成员 接口定义。在下面的示例中,类 ImplementationClass必须实现名为SampleMethod的方法 没有参数并返回void


您只是定义了
personFunctionality
变量&没有初始化,因此默认情况下它将为null,对吗?我看不出您在哪里将personFunctionality分配给实例。您可能想通过调用构造函数来分配它吗?PersonFunNational是从“PersonFunNational”界面创建的变量。请不要编写类似于
catch(Exception ex){throw new Exception(ex.Message);}
的代码。这只会在你的代码中引入bug。谢谢你的神秘性。我会记住这一点。我还是个新手。根据OP,
PersonFunctionality
是一个界面。谢谢你指出我错过了这一点,他必须实例化接口的实现者类。PersonFunctionality是一个接口,因此不可能从中创建实例。呃?@shutterrox,接口不能直接启动,但实现接口的具体类可以实例化。
interface ISampleInterface
{
    void SampleMethod();
}

class ImplementationClass : ISampleInterface
{
    // Explicit interface member implementation:  
    void ISampleInterface.SampleMethod()
    {
        // Method implementation.
    }

    static void Main()
    {
        // Declare an interface instance.
        ISampleInterface obj = new ImplementationClass();

        // Call the member.
        obj.SampleMethod();
    }
}