Достъп до член на класа от статичен метод

Знам, че има много теми, които говорят за това, но досега не съм намерил нито една, която да помогне директно на моята ситуация. Имам членове на класа, до които трябва да получа достъп както от статични, така и от нестатични методи. Но ако членовете не са статични, изглежда не мога да стигна до тях от статичните методи.

public class SomeCoolClass
{
    public string Summary = "I'm telling you";

    public void DoSomeMethod()
    {
        string myInterval = Summary + " this is what happened!";
    }

    public static void DoSomeOtherMethod()
    {
        string myInterval = Summary + " it didn't happen!";
    }
}

public class MyMainClass
{
    SomeCoolClass myCool = new SomeCoolClass();
    myCool.DoSomeMethod();

    SomeCoolClass.DoSomeOtherMethod();
}

Как бихте предложили да получа резюме от двата вида метод?


person Jeremy    schedule 10.08.2012    source източник
comment
Статичните членове принадлежат към Тип Нестатичните членове принадлежат към екземпляр от този тип.   -  person asawyer    schedule 10.08.2012
comment
Трябва ли Summary да е постоянно? Можете да маркирате е public const string Summary и да имате достъп до него и от двете.   -  person Justin Skiles    schedule 10.08.2012


Отговори (3)


Как бихте предложили да получа резюме от двата вида метод?

Ще трябва да предадете myCool на DoSomeOtherMethod - в който случай трябва да го направите метод на екземпляр, с който да започнете.

По принцип, ако се нуждае от състоянието на екземпляр от типа, защо бихте го направили статичен?

person Jon Skeet    schedule 10.08.2012
comment
Благодаря ви момчета за конструктивните съвети. Разбрах, след като изпратих въпроса и отидох на обяд, че просто ще ми спести малко караница, ако направя DoSomeOtherMethod метод на екземпляр и приключа с него. - person Jeremy; 10.08.2012

Не можете да получите достъп до членове на екземпляр от статичен метод. Целият смисъл на статичните методи е, че те не са свързани с екземпляр на клас.

person Manu Clementz    schedule 10.08.2012

Просто не можете да го направите по този начин. Статичните методи нямат достъп до нестатични полета.

Можете или да направите Summary статичен

public class SomeCoolClass
{
    public static string Summary = "I'm telling you";

    public void DoSomeMethod()
    {
        string myInterval = SomeCoolClass.Summary + " this is what happened!";
    }

    public static void DoSomeOtherMethod()
    {
        string myInterval = SomeCoolClass.Summary + " it didn't happen!";
    }
}

Или можете да предадете екземпляр на SomeCoolClass на DoSomeOtherMethod и да извикате Summary от екземпляра, който току-що сте предали:

public class SomeCoolClass
{
    public string Summary = "I'm telling you";

    public void DoSomeMethod()
    {
        string myInterval = this.Summary + " this is what happened!";
    }

    public static void DoSomeOtherMethod(SomeCoolClass instance)
    {
        string myInterval = instance.Summary + " it didn't happen!";
    }
}

Както и да е, не виждам целта, която се опитвате да постигнете.

person Drewman    schedule 10.08.2012