我使用的是.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中一样?
答案 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字段,您必须在类中创建静态只读属性。 如果您还要在类上定义=运算符,那就麻烦了。
例如,如果您的类只包含一个字符串类型的字段,则可以 定义一个=运算符,检查两个实例的字符串字段是否等于。