C# 기본 지식 편집: 기본 지식(6) 추상 클래스 및 추상 메서드
실제 프로젝트에서 상위 클래스를 디자인할 때 클래스가 구체적인 실행 프로세스를 결정할 수 없는 경우가 종종 있습니다. 예를 들어,
public class AFile { private string name = string.Empty; private string path = string.Empty; private FileType type = FileType.IsUnknown; public string Name { get { return name; } } public string Path { get { return path; } } public FileType Type { get { return type; } } public AFile(string name, string path, FileType type) { this.name = name; this.path = path; this.type = type; } public void Copy(string destPath) { //不知道怎么写,因为可能是文件还可能是文件夹,如果是压缩的还要解压 } } public enum FileType { IsUnknown = 0,//类型不明 IsFile = 1,//文件 IsDirectory =2,//文件夹 IsCompression//压缩的 }
라는 파일 클래스를 디자인합니다. 이것은 상위 클래스이며 복사 방법을 어떻게 작성해야 합니까? 파일은 네 가지 상태로 존재하고 필요에 따라 나중에 추가될 수 있으므로 파일 형식에 따라 복사 방법이 다르며 프로젝트 요구에 따라 특정 파일에 대해 일부 특수 처리가 수행될 수 있습니다. 이런 방식으로 이 상위 클래스를 다시 디자인할 때 복사 메서드에 대한 코드를 작성할 수 없습니다. 이를 상속받은 사람만 이 메서드를 재정의하고 필요에 따라 다른 실행 코드를 작성할 수 있습니다.
이처럼 클래스에는 특정 메서드가 있지만 해당 메서드에는 특정 실행 프로세스가 없습니다. 이러한 메서드를 "추상 메서드"라고 합니다.
위 AFile 클래스의 Copy 메소드를 추상 메소드라고 하는데 문제가 있습니다. AFile 클래스를 인스턴스화하면 Copy 메소드가 이 객체의 동작이 되겠지만 실제로 Copy 메소드는 확실하지 않습니다. 아직. 이는 사물의 객관적인 법칙과 일치하지 않습니다. 따라서 이 클래스는 인스턴스화할 수 없습니다. 즉, 클래스에 추상 메서드가 있으면 이 클래스를 인스턴스화할 수 없습니다. 이러한 클래스를 "추상 클래스"라고 합니다. Abstract는 인스턴스화할 수 없지만 여전히 클래스입니다. 추상 클래스와 추상 메서드는 abstract 키워드로 수정됩니다.
보시다시피 추상 클래스에는 추상 메서드와 비추상 메서드라는 두 가지 메서드가 있습니다.
비추상 메서드, 추상 클래스가 상속되고 하위 클래스에는 직접 사용하거나 재정의할 수 있는 비추상 메서드가 있습니다.
추상 클래스는 재정의하고 다시 작성해야 합니다.
위 파일 클래스 수정:
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace YYS.CSharpStudy.MainConsole { public abstract class AFile { private string name = string.Empty; private string path = string.Empty; private FileType type = FileType.IsUnknown; public string Name { get { return name; } } public string AFilePath { get { return path; } } public FileType Type { get { return type; } } public AFile(string name, string path, FileType type) { this.name = name; this.path = path; this.type = type; } public abstract void Copy(string destPath); } public enum FileType { IsUnknown = 0,//类型不明 IsFile = 1,//文件 IsDirectory =2,//文件夹 IsCompression//压缩的 } /// <summary> /// 文件类 /// </summary> public class FileInfo : AFile { public FileInfo(string name, string path, FileType type) : base(name, path, type) { } /// <summary> /// 文件的拷贝方法 /// </summary> public override void Copy(string destPath) { if (string.IsNullOrEmpty(destPath)) { string sourcePath = this.AFilePath + this.Name; //此时name是文件名,带有后缀名,加起来是文件路径 destPath += this.Name; if (File.Exists(sourcePath)) { File.Copy(sourcePath, destPath, true); } } } } /// <summary> /// 文件夹类 /// </summary> public class FileDirectoryInfo : AFile { public FileDirectoryInfo(string name, string path, FileType type) : base(name, path, type) { } /// <summary> /// 文件的拷贝方法 /// </summary> public override void Copy(string destPath) { if (string.IsNullOrEmpty(destPath)) { string sourcePath = this.AFilePath + this.Name; //此时文件名是文件夹名,加起来是文件夹路径 destPath += this.Name; if (Directory.Exists(sourcePath)) { CopyDirectory(sourcePath, destPath); } } } /// <summary> /// 拷贝文件夹的方法 /// </summary> private void CopyDirectory(string sourcePath, string destPath) { try { if (!Directory.Exists(destPath)) { Directory.CreateDirectory(destPath); } DirectoryInfo directoryInfo = new DirectoryInfo(sourcePath); foreach (FileSystemInfo fileInfo in directoryInfo.GetFileSystemInfos()) { string subFileOrDirectoryName = Path.Combine(destPath, fileInfo.Name); if (fileInfo is DirectoryInfo) { this.CopyDirectory(fileInfo.FullName, subFileOrDirectoryName); } else { if (File.Exists(sourcePath)) { File.Copy(sourcePath, destPath, true); } } } } catch{} } } }
이렇게 하면 추상 클래스 상속 및 구현이 완료됩니다. 그러나 하위 클래스가 추상 클래스를 상속하지만 추상 메서드를 구현하지 않는 경우 하위 클래스도 추상 클래스로 존재합니다. 추상 메서드가 있는 클래스를 추상 클래스라고 합니다. 어떤 경우에는 추상 메서드가 없는 클래스도 추상 키워드를 사용하여 추상 클래스로 정의할 수 있습니다. 이는 클래스를 추상화할 수 없고 상속해야 함을 나타냅니다.
위는 C# 기본 지식 요약입니다: 기본 지식 (6) 추상 클래스 및 추상 메서드에 대한 자세한 내용은 PHP 중국어 사이트(www.php.cn)를 참고하세요. !

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C#을 사용한 Active Directory 가이드. 여기에서는 소개와 구문 및 예제와 함께 C#에서 Active Directory가 작동하는 방식에 대해 설명합니다.

C#의 난수 생성기 가이드입니다. 여기서는 난수 생성기의 작동 방식, 의사 난수 및 보안 숫자의 개념에 대해 설명합니다.

C# 데이터 그리드 뷰 가이드. 여기서는 SQL 데이터베이스 또는 Excel 파일에서 데이터 그리드 보기를 로드하고 내보내는 방법에 대한 예를 설명합니다.

멀티 스레딩과 비동기식의 차이점은 멀티 스레딩이 동시에 여러 스레드를 실행하는 반면, 현재 스레드를 차단하지 않고 비동기식으로 작업을 수행한다는 것입니다. 멀티 스레딩은 컴퓨팅 집약적 인 작업에 사용되며 비동기식은 사용자 상호 작용에 사용됩니다. 멀티 스레딩의 장점은 컴퓨팅 성능을 향상시키는 것이지만 비동기의 장점은 UI 스레드를 차단하지 않는 것입니다. 멀티 스레딩 또는 비동기식을 선택하는 것은 작업의 특성에 따라 다릅니다. 계산 집약적 작업은 멀티 스레딩을 사용하고 외부 리소스와 상호 작용하고 UI 응답 성을 비동기식으로 유지 해야하는 작업을 사용합니다.
