class SomeClass
{
//...
private static SomeClass obj = null;
private SomeClass(){//...}
public static SomeClass GetSomeClass
{
if(SomeClass.obj!=null) return SomeClass.obj;
else return obj = new SomeClass();
}
//...
}
Сборщик мусора C#
Код:
на сколько я знаю объект класса удаляется в том случае если на него нет ни одной ссылки, однако в данном случае ссылка на класс всегда будет присутствовать! возможно решением будет следующий код
Код:
class SomeClass
{
//...
public static Clean()
{
obj = null;
}
//...
}
{
//...
public static Clean()
{
obj = null;
}
//...
}
однако меня интересует поведение сборщика мусора в первом варианте, с нетерпением жду разъяснений и ваших комментариев!=)
Цитата: Artem_3A
День добрый, у меня возник такой вопрос - как поведет себе сборщик мусора если есть такой код
Будьте проще:
Код:
public sealed class SomeClass {
private static SomeClass _instance = null;
public static SomeClass Instance {
get {
if (ReferenceEquals(null, _instance))
_instance = new SomeClass();
return _instance;
}
}
private SomeClass() {
}
}
private static SomeClass _instance = null;
public static SomeClass Instance {
get {
if (ReferenceEquals(null, _instance))
_instance = new SomeClass();
return _instance;
}
}
private SomeClass() {
}
}
Код:
~SomeClass() {
System.Console.WriteLine("Finalizing SomeClass instance");
}
System.Console.WriteLine("Finalizing SomeClass instance");
}
Код:
public static class Program {
private static SomeClass some_class_ref;
public static void Main() {
some_class_ref = SomeClass.Instance;
}
}
private static SomeClass some_class_ref;
public static void Main() {
some_class_ref = SomeClass.Instance;
}
}
После завершения исполнения домена приложения (в данном случае Default-домена) CLR просто сочтет все оставшиеся в живых объекты мусором и вызовет их финализаторы.
Настоятельно рекомендую к прочтению:
ясно, значит данный объект будет висеть до конца работы приложения! относительно "быть проще", если честно не увидел особой разницы в моем и вашем коде, если не трудно, разъясните чем ваш код предпочтительней, дабы ликвидировать этот моей пробел знаний!=)))
Цитата: hardcase
Настоятельно рекомендую к прочтению:
http://rsdn.ru/article/dotnet/GC.xml
http://rsdn.ru/article/dotnet/GC.xml
спс, уже читаю, очень полезно!=)
Код:
...
public static SomeClass Instance
{
get
{
return _instance ?? (_instance = new SomeClass());
}
}
...
public static SomeClass Instance
{
get
{
return _instance ?? (_instance = new SomeClass());
}
}
...
АПД. Кстати Excel данные отображает коректно, но вот в ячейке они записаны с апострофом, по видимому, этим символизируется их принадлежность к строковому типу.