網(wǎng)站首頁 編程語言 正文
一、類成員的訪問級別
- public:可由任何代碼訪問。
- private(默認):只能由類中的代碼訪問。
- internal:只能由它所在的項目(程序集)內(nèi)部代碼訪問。
- protected:只能由類和其派生類訪問。
- protected internal:只能由它所在的項目(程序集)或派生類的代碼訪問。
二、定義字段
class MyClass
{
public int MyInt;//公共字段
int myInt;//私有字段
public readonly int MyInt2 = 17;//只讀成員,只能在聲明時賦值或在構造函數(shù)中賦值。
public static int myInt3;//靜態(tài)字段,通過類訪問。作用:1、記錄一實例化對象的個數(shù),2、存儲必須在所有實例間共享的值。
public const float PI = 3.14F;//常量,編譯時就固定,一旦發(fā)生更改,需要重新編譯,必須且只有在聲明時初始化。
}
三、定義方法
方法的繼承修飾符:
- virtual:方法可以重寫。
- abstract:方法必須重寫,只用于抽象類。
- override:重寫一個基類方法。可以和sealed一起使用,應用在方法或?qū)傩裕硎静荒苓M一步的重寫了。
- extern:代碼放于項目外,僅用于靜態(tài)[DllImport]表示的方法。
- static:方法只能通過類訪問。靜態(tài)方法和屬性不能訪問其基類的非靜態(tài)成員,不能訪問任何對象的實例變量。靜態(tài)成員可繼承。
- new :隱藏基類成員。
void Main()
{
A b1 = new B();//多態(tài)
b1.M();//BM
B b2 = new B();
b2.M();//BM
}
abstract class A
{
public virtual void M()//虛擬方法,可繼承
{
Console.Write("AM");
}
}
class B : A
{
public override void M()// 重寫了基類方法M
{
Console.Write("BM");
}
}
無論基類是否為虛擬,派生類都可以用new 來隱藏。不覆蓋基類方法,不影響基類的方法。可以用base.M()方式訪問基類成員。
void Main()
{
A b1 = new B();
b1.M();//AM
B b2 = new B();
b2.M();//BM
}
abstract class A
{
public virtual void M()//虛擬方法,可繼承
{
Console.Write("AM");
}
}
class B : A
{
public new void M()// 重寫了基類方法M
{
Console.Write("BM");
}
}
四、定義屬性
屬性的繼承修飾符:virtual,abstract,override.
- 只讀屬性:不頂用其中的get、set方即可。
- 只寫屬性:用private修飾符對get、set方法進行保護。
public class A
{
private int intVal;
public int Val
{
get { return intVal; }
set
{
if (value >= 0 && value <= 10)
intVla = value;
else
throw new Exception("XX");
}
}
}
五、接口實現(xiàn)
實現(xiàn)接口的類必須實現(xiàn)所有接口成員,且匹配指定的簽名。接口成員默認是公共的。
若要實現(xiàn)接口成員,類中對應的成員必須是公共的,非靜態(tài)的,并且與接口成員集郵相同的名稱和簽名。
interface IMyInterface //定義接口
{
int DoSth();//定義方法
int IMyInt { set; get; }//定義屬性
event EventHandler Event;//定義事件
string this[int index] { get; set; } //定義索引器
}
class MyClass : IMyInterface
{
private int _x;
int IMyInterface.DoSth() //顯示接口實現(xiàn)
{
return _x;
}
public int IMyInt//隱式接口實現(xiàn)
{
get { return _x; }
set { _x = value; }
}
public event EventHandler Event;
protected void onEvent()
{
if (Event == null)
{
Event(this, EventArgs.Empty);
}
}
public string this[int index]
{
get { return _x.ToString(); }
set { _x = int.Parse(value); }
}
}
1、顯示接口實現(xiàn),只能通過接口訪問:
MyInterface myClass=new MyClass();
myClass.DoSth();
2、隱式接口實現(xiàn),既可通過類,也可通過接口訪問。
MyClass myClass=new MyClass();
myClass.DoSth();
六、定義索引器
索引器indexer是一種特殊類型的屬性。添加到類中,以提供類似于數(shù)組的訪問。
void Main()
{
MyClass myClass = new MyClass();
myClass[0] = "d";
Console.Write(myClass[0]);//d
Console.Write(myClass[2]);//c
}
public class MyClass
{
private string[] arr = { "a", "b", "c" };
public string this[int index]
{
get { return arr[index]; }//只有get,無set的索引為只讀索引
set { arr[index] = value; }
}
}
七、運算符重載
void Main()
{
MyClass myClass1 = new MyClass(500);
MyClass myClass2 = new MyClass(200);
Console.Write(myClass1 - myClass2);//300
}
public class MyClass
{
decimal weight;
public MyClass(decimal weight)
{
this.weight = weight;
}
public static decimal operator -(MyClass a, MyClass b)
{
return a.weight - b.weight;
}
}
八、定義事件
void Main()
{
MyClass myClass1 = new MyClass();
myClass1.myEvent += (sender, args) => { Console.Write(sender); };
myClass1.TriggerEvent();//MyClass
}
public class MyClass
{
public event EventHandler<EventArgs> myEvent;//定義事件
public void TriggerEvent()
{
EventHandler<EventArgs> temp = myEvent;
if (temp != null)
temp(this, EventArgs.Empty);//觸發(fā)事件
}
}
原文鏈接:https://www.cnblogs.com/springsnow/p/9428487.html
相關推薦
- 2023-10-14 uni-app adb安卓wifi無線調(diào)試
- 2022-02-18 cv2.error: OpenCV(4.5.4-dev) :-1: error: (-5:Bad a
- 2023-11-15 Latex如何加粗文字;表格中如何加粗文字而不讓文本變寬
- 2022-05-18 C語言初識動態(tài)內(nèi)存管理malloc?calloc?realloc?free函數(shù)_C 語言
- 2022-05-08 python刪除列表元素del,pop(),remove()及clear()_python
- 2022-02-17 H5移動端點擊出現(xiàn)背景藍色框的解決方案
- 2022-08-14 在WPF中合并兩個ObservableCollection集合_C#教程
- 2022-04-07 Redis數(shù)據(jù)庫分布式設計方案介紹_Redis
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支