> 백엔드 개발 > C++ > 정적 메소드에서 비 정적 메소드를 호출하면 '객체 참조가 필요하다'는 이유는 무엇입니까?

정적 메소드에서 비 정적 메소드를 호출하면 '객체 참조가 필요하다'는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2025-02-02 17:41:11
원래의
279명이 탐색했습니다.

Why Does Calling a Non-Static Method from a Static Method Cause c# 오류 CS0120 : 객체 참조 필수

이 오류는 "비 종종 필드, 방법 또는 속성에 대한 객체 참조가 필요합니다 ..."는 정적 메소드 내에서 비 ​​정적 멤버 ()에 액세스하려고 시도 할 때 발생합니다 (). 제공된 코드를 살펴 보겠습니다 :

문제는 정적 멤버와 비 정적 멤버의 근본적인 차이에 있습니다. 정적 멤버 :

는 클래스의 특정 인스턴스 가 아니라 setTextboxText 클래스 자체에 속합니다. 클래스의 어떤 객체가 생성되기 전에도 존재합니다. SumData 비 정적 멤버 : 는 클래스의 <code class="language-csharp">namespace WindowsApplication1 { public partial class Form1 : Form { // ... other code ... private static void SumData(object state) { // ... some code to calculate 'result' ... setTextboxText(result); // Error occurs here } // ... other code ... including setTextboxText method ... } }</code> 인스턴스

에 속합니다. 액세스하려면 객체 (인스턴스)가 필요합니다

  • 는 정적이므로 관련 객체가 없습니다. 그러므로 를 직접 호출 할 수 없으므로 객체가 작동해야합니다. . 솔루션 : 이것을 고치는 두 가지 주요 방법이 있습니다 : 1. MATION STATIC :
  • 인스턴스 별 데이터에 대한 액세스가 필요하지 않으면
  • 주의 : UI 관련 방법을 정적으로 만드는 것은 일반적으로 스레딩 문제로 이어질 수 있고 코드를 유지하기가 더 어려워지기 때문에 일반적으로 낙담합니다. 2. 비 정적 메소드 (권장)에서 를 호출하십시오 이것은 더 깨끗하고 일반적인 솔루션입니다. 중개자 역할을하려면 정적이 아닌 방법이 필요합니다. 최상의 접근법은 가 어떻게 호출되는지에 따라 다릅니다. 몇 가지 일반적인 시나리오는 다음과 같습니다.

SumData가 Form1의 메소드 내에서 호출되면 setTextboxText는

를 직접 사용할 수 있습니다 (위의 예와 같이).

. 배경 스레드 또는 타이머에서

가 호출되면 :

는 대의원을 사용하여 전화를 UI 스레드로 다시 마샬링하여 교차 스레드 예외를 피해야합니다.

<code class="language-csharp">namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        // ... other code ...

        private static void SumData(object state)
        {
            // ... some code to calculate 'result' ...
            setTextboxText(result); // Error occurs here
        }

        // ... other code ... including setTextboxText method ...
    }
}</code>
로그인 후 복사
  • 가 완전히 별도의 클래스에서 호출되면 : SumData 인스턴스에 대한 참조를 전달하는 방법이 필요합니다. 여기에는 에 대한 인수로 전달하거나 정적 필드에 참조를 저장하는 것이 포함될 수 있습니다 (잠재적 합병증으로 인해 일반적으로 선호되지 않음). . Form1 응용 프로그램의 컨텍스트에 가장 잘 맞는 솔루션을 선택하고 UI 요소를 다룰 때는 항상 스레드 안전 우선 순위를 정하는 솔루션을 선택해야합니다. 비 정적 중개 방법과 적절한 스레딩을 사용하는 옵션 2는 일반적으로 가장 강력하고 유지 관리 가능한 솔루션입니다.

위 내용은 정적 메소드에서 비 정적 메소드를 호출하면 '객체 참조가 필요하다'는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿