我们可以像在String.Empty中一样拥有Class.Empty对象吗?

时间:2010-08-04 11:37:05

标签: .net vb.net

我使用的是.NET 3.5。我正在创建一个简单的类,并希望确保处理后的类不应该为null或者也不应该是新的..

所以如果我们可以像那样测试它

Dim objClass as new Class()

' do some processing with the class '
' and then.. check that if this object returned is not empty '

If (objClass = Class.Empty) Then
//Do stuff
Else
//Do Other Stuff
End If

有没有一种方法可以创建这个空字段,就像我们在String.Empty中一样?

6 个答案:

答案 0 :(得分:4)

它有设计模式Null Object pattern

答案 1 :(得分:1)

是的,引用类型称为null,值类型称为new T()

答案 2 :(得分:1)

但是在你的例子中,这个类在技术上并不是空的。您已使用默认构造函数创建了Class实例。谁知道,默认构造函数可能已初始化超过10MB的字符串内容。你的代码在技术上检查的是,类是在构造之后等于它的默认状态。

有关VB构造函数的示例以及正在发生的事情,请参阅this

如果您正确实施了CompareTo(...),您可以致电

If (objClass.CompareTo(new Class()) == 0) Then 
 //Do stuff 
Else
 //Do Other Stuff 
End If 

但这似乎有点过分/昂贵,但它是唯一可行的方式。

另一种选择是:(抱歉基于c#的例子)

Interface IEmpyClass
{
   bool IsEmptyClass{get;}
}

public class Class : IEmptyClass
{
   public bool IsEmptyClass{get; private set;}

   public Class()
   {
     IsEmptyClass = true;
   }

   public void DoSomething()
   {
       // Do something
       IsEmptyClass = false;
   }
}

当类状态从“空”更改时,您将负责实现示例并更改属性,但是代码等会更快,并且当clases具有带成员的构造函数时可以应对。可以使用

进行检查
If (objClass.IsEmptyClass) Then 
 //Do stuff 
Else
 //Do Other Stuff 
End If 

答案 3 :(得分:0)

您可以在“Class”上使用名为“Empty”的Extension方法,该方法采用var(如果.net 4.0)或object(旧版本)类型的一个参数。此扩展方法的实现将检查它是否为null或未初始化为默认状态并返回true或false。

答案 4 :(得分:0)

好的伙计感谢您的帮助..到目前为止我已经到达这里了......现在工作非常好。

Public Class cc
    Private _obj As Boolean = False
    Public _index As Integer = 0

    Public ReadOnly Property IsEmpty() As Boolean
        Get
            Return _obj
        End Get
    End Property

    Public Property Index() As Integer
        Get
            Return _index
        End Get
        Set(ByVal value As Integer)
            _obj = False
            _index = value //I need to set it to false for every property of that class.
        End Set
    End Property

    Sub New()
        _obj = True
    End Sub

    Public Shared Function Empty(ByVal obj As cc) As Boolean
        If Not (obj Is Nothing) Then
            If Not (obj.IsEmpty()) Then
                Return False
            End If
        End If
        Return True
    End Function
End Class

在单独的课程中:

Dim Sc As New cc()
//'Sc=Nothing
Sc.Index=1

If (cc.Empty(Sc)) Then
    Label1.Text = "Empty"
Else
    Label1.Text ="Not Empty"
End If

答案 5 :(得分:0)

要定义Empty字段,您必须在类中创建静态只读属性。 如果您还要在类上定义=运算符,那就麻烦了。

例如,如果您的类只包含一个字符串类型的字段,则可以 定义一个=运算符,检查两个实例的字符串字段是否等于。