如何创建一个类对象

时间:2015-05-04 07:14:03

标签: c# asp.net

我有一个名为ErrorMessageTest的类,它有一些属性。

我有另一个名为ErrorHandlerTest的类和一个名为HandleErrorTest的方法,它将上面作为参数并在下面的结构中创建一个类。

public class ErrorMessageTest
{
    private string EventId;
    private string TransactionId;
    private string Timestamp;
    private string Component;
    private string UserId;
    private string Message;
    private string Exception;
}

public static class ErrorHandlerTest
{
    public static void HandleErrorTest(string EventId, string TransactionId, 
                                       DateTime Timestamp, string Component,
                                       string UserId)
    {

    }
}

我需要返回一个ErrorMessage对象,但我不知道如何创建它的实例。

5 个答案:

答案 0 :(得分:3)

你有一些基本的错误。

首先,您的所有字段都是私有的。相反,您将要创建公共属性

public class ErrorMessage
{
    public string EventId { get; set; }
    public string TransactionId { get; set; }
    public DateTime Timestamp { get; set; } 
    public string Component { get; set; }
    public string UserId { get; set; }
    public string Message { get; set; }
    public Exception Exception { get; set; }
}

现在,在您的HandleError方法中,您需要返回类型ErrorMessage而不是voidvoid表示无返回类型。如果您还想将其设为static课程,请执行以下操作:

public static class ErrorHandler
{
    public static ErrorMessage HandleError(string eventId, string transactionId, 
                                           DateTime timeStamp, string component,
                                           string userId)
    {
        return new ErrorMessage
        {
            EventId = eventId,
            TransactionId = transactionId,
            Timestamp = timeStamp,
            Component = component,
            UserId = userId
        };
    }
}

答案 1 :(得分:2)

在您必须设置私有字段进行测试的情况下,我建议使用Microsoft.VisualStudio.TestTools.UnitTesting包中的PrivatObject-Class。它有一个SetField方法,允许您设置私有字段。

这篇文章How to instantiate PrivateType of inner private class讨论了PrivatObject和PrivateType的主题。 PrivateObject用于访问实例的私有成员,而PrivateType用于静态类成员。

但请注意,通过反射设置私有字段(如PrivateObject一样)的缺点是,您的测试需要了解ErrorMessage类的内部,这违反了测试合同的原则(公共类)成员,接口)。

答案 2 :(得分:0)

尽管您的所有变量在ErrorMessageTest类中都是私有的。你需要公开发布它。 你可以这样做 -

public class ErrorMessage
{
    public string EventId;
    public string TransactionId;
    public DateTime Timestamp;
    public string Component;
    public string UserId;
    public string Message;
    public string Exception;
}

public class ErrorHandlerTest
{
    public static ErrorMessage HandleErrorTest(string EventId, string TransactionId,
                                       DateTime Timestamp, string Component,
                                       string UserId)
    {
        return new ErrorMessage()
        {
            Component = Component,
            EventId = EventId,
            Timestamp = Timestamp,
            TransactionId  = TransactionId,
            UserId = UserId

        };
    }
}

答案 3 :(得分:0)

我希望您需要在方法HandleErrorTest()中返回 ErrorMessageTest 类。:)如果是这样,只需将方法的返回类型更改为 ErrorMessageTest ,如< / p>

    public static ErrorMessageTest HandleErrorTest(string EventId, string TransactionId, 
                                   DateTime Timestamp, string Component,
                                   string UserId)
{

}

并创建一个ErrorMessageTest类的实例,并形成像这样返回的对象

  return new ErrorMessageTest
 {
     EventId = eventId,
     TransactionId = transactionId,
     Timestamp = timeStamp,
     Component = component,
     UserId = userId
 };

现在你的方法看起来像

    public static ErrorMessageTest HandleErrorTest(string EventId, string TransactionId, 
                                   DateTime Timestamp, string Component,
                                   string UserId)
        {

  return new ErrorMessageTest
    {
     EventId = eventId,
     TransactionId = transactionId,
     Timestamp = timeStamp,
     Component = component,
     UserId = userId
    };
       }

答案 4 :(得分:-1)

在ErrorHandlerTest中实例化ErrorMessageTest add:

ErrorMessageTest errorMessageTest = new ErrorMessageTest();

这将创建一个ErrorMessageTest类的实例,并且可以通过本地变量errorMessageTest访问,您可以随意使用它。

编辑:错误的名称复制粘贴,替换为errorMessageTest