메서드 상속에 대한 유형 별칭의 영향 이해
Go와 같은 프로그래밍 언어의 일반적인 측면인 유형 별칭은 기존 유형에 대한 새 식별자를 만듭니다. 그러나 메소드 상속 측면에서 이들의 동작은 혼란스러울 수 있습니다.
다음 Go 코드를 고려하세요.
package main import ( "fmt" "time" ) type dur struct { time.Duration } type durWithMethods dur type durWithoutMethods time.Duration func main() { var d durWithMethods // works ?? fmt.Println(d.String()) var dWM durWithoutMethods fmt.Println(dWM.String()) // doesn't compile }
이 코드는 dur, durWithMethods 및 durWithoutMethods의 세 가지 유형을 선언합니다. dur 유형은 구조체 삽입 시간입니다.Duration. durWithMethods 유형은 dur의 별칭으로 정의됩니다. 반면, durWithoutMethods 유형은 time.Duration의 별칭입니다.
durWithMethods가 time.Duration에서 String() 메서드를 상속하는 반면 durWithoutMethods는 상속하지 않는 이유에 대한 의문이 생깁니다.
유형 선언 및 메소드 상속
Go에서 유형 선언은 유형 정의와 유형 별칭이라는 두 가지 범주로 나뉩니다.
이 경우 dur은 유형 정의이고 둘 다 durWithMethods 및 durWithoutMethods는 유형 별칭입니다.
메서드 상속에 미치는 영향
dur와 같은 유형 정의를 사용하여 새 유형이 생성되면 상속된 모든 메서드가 손실됩니다. 이는 dur이 본질적으로 time.Duration의 String() 메서드를 소유하지 않음을 의미합니다. 그러나 durWithMethods와 같은 유형 별칭을 사용하여 새 유형이 생성되면 기본 유형의 모든 메서드(이 경우 dur.
Time.Duration 및 Raw Types
time.Duration은 원시 유형이므로 메서드를 가질 수 없습니다. 그러나 dur과 같은 구조체 내에 포함될 수 있으며 이를 통해 구조체가 메서드를 상속할 수 있습니다.유형 별칭과 직접 별칭
durWithoutMethods는 직접적인 별칭입니다. 시간.기간. 이러한 유형 제거 동작은 직접 별칭에 고유하며 durWithMethods와 같은 유형 별칭에는 적용되지 않습니다.결론적으로, durWithMethods는 시간을 포함하는 유형에 대한 별칭이기 때문에 time.Duration의 String() 메서드를 상속합니다. .Duration, durWithoutMethods는 원시 유형의 직접적인 별칭이기 때문에 이 메서드를 상속하지 않습니다.위 내용은 유형 별칭이 원시 유형이 아닌 포함된 유형의 메서드를 상속하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!