문제

C#에서 다음의 차이점은 무엇입니까?

public static class ClassName {}

그리고:

public class ClassName {}
도움이 되었습니까?

해결책

정적 클래스는 인스턴스화 될 수 없으며 정적 멤버 만 포함 할 수 있습니다. 따라서 정적 클래스에 대한 호출은 다음과 같습니다. MyStaticClass.MyMethod(...) 또는 MyStaticClass.MyConstant.

비 정적 클래스는 인스턴스화 될 수 있으며 비 정적 멤버 (인스턴스 생성자, 소멸자, 인덱서)를 포함 할 수 있습니다. 비 정적 클래스의 비 정적 멤버는 객체를 통해서만 호출 할 수 있습니다.

MyNonStaticClass x = new MyNonStaticClass(...);
x.MyNonStaticMethod(...);

다른 팁

첫째, 답변에 대한 의견은 "정적"이 무엇을 의미하는지에 대해 물었습니다. C# 용어에서 "static"은 "유형의 인스턴스가 아닌 유형 자체와 관련된"것을 의미합니다. 참조 또는 값 대신 유형 이름을 사용하여 정적 멤버 (다른 유형에서)에 액세스합니다. 예를 들어:

// Static method, so called using type name
Guid someGuid = Guid.NewGuid();
// Instance method, called on a value
string asString = someGuid.ToString();

이제 정적 클래스 ...

정적 클래스는 일반적으로 "유틸리티"클래스로 사용됩니다. 표준의 예는 아마도일 것입니다 System.Math. 수학 인스턴스를 만드는 것은 의미가 없습니다. 단지 "is"입니다. 몇 가지 규칙 ( "CAN"및 "CAN CAN") :

  • 정적 클래스는 항상 파생됩니다 object. 다른 기본 유형을 지정하거나 정적 클래스가 인터페이스를 구현할 수 없습니다.
  • 정적 클래스에는 인스턴스 멤버를 가질 수 없습니다. 모든 변수, 메소드 등이 정적이어야합니다.
  • 정적 클래스는 인스턴스 생성자와 컴파일러를 선언 할 수 없습니다. 그렇지 않습니다 기본적으로 매개 변수가없는 생성자를 만듭니다. (정적 클래스가 C# 2.0에 들어 오기 전에 사람들은 종종 개인 생성자가있는 추상 클래스를 만들어 인스턴스화를 막을 것입니다. 여기서는 필요하지 않습니다.)
  • 정적 클래스는 암시 적으로 추상적입니다 (즉, 추상 클래스를 설명하는 IL에 컴파일되어 있지만 추가 할 수는 없습니다. abstract 직접 수정 자.
  • 정적 클래스는 암시 적으로 밀봉되어 있습니다 (즉, 봉인 된 클래스를 설명하는 IL에 편집되어 있음). sealed 직접 수정 자.
  • 정적 클래스 5월 일반적이어야합니다.
  • 정적 클래스 5월 비 정적 또는 정적 클래스로 중첩되어야합니다.
  • 정적 클래스 5월 비 정적 또는 정적 인 중첩 유형이 있습니다.
  • 정적 인 최상위 비 게 니체 클래스 만 확장 방법 (C# 3.0)을 포함 할 수 있습니다.

정적 클래스를 상속받을 수는 없지만 정적 부재를 가진 비 정적 클래스는 상속받을 수 있습니다.

public static class ClassName {}

정적 클래스는 글로벌 변수와 같습니다. 코드를 인스턴스화하지 않고 어디서나 사용할 수 있습니다. 예를 들어: 클래스 이름. DOT 연산자 후에는 속성이나 기능을 사용할 수 있습니다.

 public class ClassName {}

그러나 비 정적 클래스가 있다면이 클래스의 인스턴스를 만들어야합니다. 예를 들어:

 ClassName classNameObject = new ClassName(); 

정적 클래스의 모든 방법/속성 ~ 해야 하다 '정상적인'클래스는 인스턴스와 정적 메소드의 혼합을 포함 할 수 있지만 정적이어야합니다.

정적 클래스의 인스턴스화 (개체 생성)는 할 수 없습니다. 그리고 정적 멤버 만 포함 할 수 있습니다.

예 : System.Math

정적 클래스에는 정적 멤버 만 포함 할 수 있습니다.

정적 멤버는 먼저 수업을 인스턴스화하지 않고 사용할 수 있습니다.

정적 클래스와 멤버는 인스턴스를 작성하지 않고 액세스 할 수있는 데이터 및 메소드를 작성하는 데 사용됩니다 ( new 키워드, 클래스의 생성자를 가질 수 없습니다.

자체 객체 아이덴티티에 의존하지 않을 때 정적 클래스를 선언 할 수 있으므로 정적 클래스에는 정적 멤버 만 포함해야합니다.

이 클래스는 클래스가 포함 된 프로그램 또는 네임 스페이스가로드 될 때 CLR에 의해로드됩니다.

그들은 또한 봉인되어 있으며 상속받을 수 없습니다.

http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-ca-ca-ca-ca-ca-ca-actatic2.html - 이것에 대한 아주 좋은 기사. 이것은 Java를위한 것입니다. 그러나 나는 개념이 C#에서도 동일해야한다고 생각한다.

c의 정적 변수

자동 변수로서 클래스에 로컬 로컬 로컬이지만 함수가 더 이상 활성화되지 않아 정적 변수가 사라지지 않음

c.의 정적 함수다른 파일의 함수에 보이지 않는 함수.

*CPP의 정적 데이터 구성원 *데이터 멤버는 CPP 정적의 변수 또는 함수 일 수 있습니다. 정적은 두 데이터 멤버 모두에게 적용 할 수 있습니다. 클래스 자체는 정적 일 수 있습니다.

정적 클래스이 클래스는 객체를 인스턴스화 할 수 없습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top