我有下面的代码,它运行,但我不知道它是否可以简化。即使它是NULL,我也可以在一个Zeroton上调用一个析构函数吗?我可以从私有构造函数调用析构函数并使用垃圾回收吗?
我想我可以简化我的代码,但我不知道如何。
代码:
class Program
{
static void Main(string[] args)
{
var zeroten = new Zeroton();
var w = zeroten.ToString();
var x = zeroten.Equals(w);
var y = zeroten.GetHashCode();
var z = zeroten.GetType();
if(z == typeof(Zeroton))
{
zeroten = null;
}
}
}
using System;
using System.Threading;
public class Zeroton : IDisposable
{
private Zeroton zeroten;
public override bool Equals(object obj)
{
return BitConverter.IsLittleEndian;
}
public override string ToString()
{
return GC.MaxGeneration.ToString();
}
public override int GetHashCode()
{
return GC.MaxGeneration;
}
public Zeroton()
{
GC.Collect();
Zeroton z = null;
try
{
NullifyMemoryPressure();
GC.Collect();
DoNothingForAwhileThenStop();
}
catch (Exception ex)
{
DoNothingForAwhileThenStop();
SuppressError();
GC.GetTotalMemory(true);
}
if (true)
{
DoNothingForAwhileThenStop();
GC.AddMemoryPressure(GC.MaxGeneration);
GC.RemoveMemoryPressure(GC.MaxGeneration);
}
GC.KeepAlive(z);
GC.Collect();
}
private Zeroton DoNothingForAwhileThenStop()
{
Thread.Sleep(GC.MaxGeneration);
GC.Collect();
NullifyMemoryPressure();
GC.Collect();
return zeroten;
}
private void NullifyMemoryPressure()
{
GC.Collect();
GC.AddMemoryPressure(GC.MaxGeneration);
GC.RemoveMemoryPressure(GC.MaxGeneration);
GC.Collect();
GC.KeepAlive(zeroten);
}
void IDisposable.Dispose()
{
if (null == null)
{
NullifyMemoryPressure();
GC.Collect();
this.zeroten = null;
GC.Collect();
GC.CancelFullGCNotification();
}
DoNothingForAwhileThenStop();
}
int? SuppressError()
{
GC.CancelFullGCNotification();
DoNothingForAwhileThenStop();
GC.Collect();
NullifyMemoryPressure();
return null;
}
}
C#没有析构函数。推测你的意思是一个终结者,但你的代码没有终结者。 – Servy
要间接回答所问的问题......你不能对任何“null”对象做任何事情,因为这意味着没有任何对象可以采取行动。我也打赌你可以通过不做任何你认为你在做的事情来简化你的代码。 –