c#中public類比博圖

簡單來說,**`public` 定義了“接口”或“引腳”**,就像你的FB塊上的 `Input`, `Output`, `InOut` 管腳一樣。它決定了外部的其他代碼(如另一個FB或OB1)可以看到和操作這個塊里的什么東西。

?

讓我用你最熟悉的博圖概念來詳細類比一下。

?

---

?

### 🔧 博圖 FB 與 C# 類的直觀對比

?

想象一下你在博圖里創建一個**電機控制FB** `FB_Motor`:

?

1. **你在接口區(Interface)定義變量**:

? ? * `Input`: `Start`, `Stop`, `Reset`

? ? * `Output`: `Ready`, `Running`, `Fault`

? ? * `InOut`: `ActualSpeed`

? ? * `Static`: `InternalTimer`, `StartupDelay` (這些是內部使用的,外部看不到)

?

2. **在代碼區編程**:使用這些管腳和內部變量實現邏輯。

?

3. **在OB1中調用**:你拖拽這個FB到一個DB上(實例化),然后你**只能看到和連接**你定義在 `Input`/`Output` 上的管腳。你完全看不到、也無法直接訪問 `InternalTimer` 或 `StartupDelay` 這些內部變量。

?

---

?

### ?? 現在,我們把上面的步驟“翻譯”成 C#:

?

```csharp

// 1. 這相當于創建了一個新的 FB 塊,類名就是FB名

public class MotorController

{

? ? // 2. 定義接口區(Interface)的管腳

? ??

? ? // Inputs - 相當于FB的Input管腳

? ? public bool Start { get; set; } // 公共屬性,外部可讀可寫

? ? public bool Stop { get; set; } // 公共屬性,外部可讀可寫

? ??

? ? // Outputs - 相當于FB的Output管腳

? ? public bool Ready { get; private set; } // 公共屬性,外部只讀 (就像PLC里的輸出只能由FB內部控制)

? ? public bool Running { get; private set; }

? ??

? ? // Static/Internal - 相當于FB的Static變量

? ? private System.Timers.Timer _internalTimer; // private 關鍵字:外部完全不可見,僅供內部使用

? ? private int _startupDelay; // private 關鍵字:外部完全不可見,僅供內部使用

?

? ? // 3. 這相當于在代碼區編寫邏輯

? ? public void ProcessCycle() // 一個公共方法,相當于FB里的網絡段,外部可以調用

? ? {

? ? ? ? if (Start && !Stop)

? ? ? ? {

? ? ? ? ? ? Running = true;

? ? ? ? ? ? // ... 內部計時器邏輯等

? ? ? ? }

? ? ? ? else

? ? ? ? {

? ? ? ? ? ? Running = false;

? ? ? ? }

? ? ? ? // 更新Ready等其他狀態

? ? }

?

? ? // 構造函數 - 相當于給FB的Static變量賦初始值

? ? public MotorController()

? ? {

? ? ? ? _startupDelay = 5000; // 初始化內部變量

? ? ? ? _internalTimer = new System.Timers.Timer();

? ? }

}

```

?

---

?

### 📋 訪問權限關鍵字與博圖概念的對應表

?

| C# 關鍵字 | 博圖中的對應概念 | 解釋和用途 |

| :--- | :--- | :--- |

| **`public`** | **`Input`, `Output`, `InOut` 管腳** | **這就是你問的 `public`**。它就像FB的對外接口引腳,聲明了“這是外部其他部分(如OB1)可以**看到和訪問**的東西”。 |

| **`private`** | **`Static`, `Temp` 變量** | 這相當于FB內部的中間變量或狀態位。它們被**隱藏和保護**起來,外部代碼無法看到或直接修改,防止被意外干擾,保證了程序的封裝性和可靠性。 |

| `internal` | (無直接對應) | 一個程序集內部可訪問,可以理解為“項目內公開”,但對整個解決方案外的代碼隱藏。 |

| `protected` | (無直接對應) | 涉及繼承,比如一個“高級電機FB”繼承自你的“基礎電機FB”,它可以訪問基類的一些特定內部變量。 |

?

### 💡 為什么需要 `public` 和 `private`?(核心思想差異)

?

* **博圖/PLC編程**:硬件思維導向。**物理上**,你已經通過PLC的硬件組態定義了哪些是輸入端子(I),哪些是輸出端子(Q)。FB的接口區是這種硬件思維在軟件上的延伸。**訪問權限是由硬件和軟件接口明確定義的,相對固定。**

?

* **C#/計算機編程**:軟件架構思維導向。沒有固定的硬件接口,所有代碼都運行在同一個CPU和內存空間中。如果不加限制,任何代碼都可以隨意修改任何內存數據,這將導致災難性的后果(比如一個UI按鈕的代碼錯誤地修改了電機的內部狀態計數器)。

? ? * 因此,需要通過 `public` 和 `private` 這些**訪問修飾符**來**人為地、邏輯地**定義一套“接口規則”,從而實現:

? ? ? ? 1. **封裝**:隱藏內部實現細節,只暴露必要的接口。外部只需要知道 `Start()` 方法能啟動電機,而不需要知道內部用了哪個計時器。

? ? ? ? 2. **安全性**:保護內部數據不被意外修改,提高代碼的穩定性和可維護性。

? ? ? ? 3. **模塊化**:使得代碼模塊(類)之間耦合度降低,更容易獨立設計和測試。

?

### 🎯 給你的實踐建議

?

1. **開始建模時**:把你想要創建的每一個設備(電機、閥門、傳感器)都想象成一個 **FB**。

2. **編寫C#類時**:

? ? * 問自己:“這個設備的**對外接口**(命令、狀態信號)是什么?” -> 將這些字段/屬性/方法設為 **`public`**。

? ? * 問自己:“哪些是實現設備功能所需的**內部狀態或中間變量**?” -> 將這些字段/屬性設為 **`private`**。

3. **調用時**:在你的 `Main` 函數(相當于OB1)中,你只能通過 `.` 操作符訪問到那些 `public` 的成員,這完全模擬了在博圖中只能連接FB塊管腳的行為。

?

總結:**`public` 就是你FB塊上的那些外部可見的管腳**。它是你刻意設計出來與外部世界通信的通道。理解了這一點,你就向成功轉換思維邁出了一大步。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95999.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95999.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95999.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

K8s基于節點軟親和的高 CPU Pod 擴容與優先調度方案

場景與目標 集群節點:master(4 核)、node1(16 核)、node2(16 核)。目標:將一個高 CPU 消耗的工作負載橫向擴展到 4 個實例,并通過**節點親和性(軟親和&#…

MySQL InnoDB 的鎖機制

引言 鎖是數據庫管理并發訪問的另一種核心機制,與 MVCC 相輔相成。本文將系統梳理 MySQL InnoDB 中鎖的粒度、類型和工作原理,并深入探討它如何與事務隔離級別配合,共同保障數據的一致性和完整性。 一、 鎖的粒度:由粗到細 InnoD…

狀態模式(State Pattern)——網絡連接場景的 C++ 實戰

一、為什么要用狀態模式?在開發中,經常遇到“對象在不同狀態下行為不同”的情況。最常見的寫法是用一堆 if/else 或 switch 來判斷狀態,然后在不同分支里寫邏輯。這樣做有兩個問題:狀態增多后,條件分支會變得臃腫。修改…

使用csi-driver-nfs實現K8S動態供給

文章目錄一、部署NFS二、k8s環境部署csi-nfs三、測試動態供給補充應用服務器IPnfs-server192.168.1.5k8s-master01192.168.1.1k8s-node01192.168.1.2k8s-node02192.168.1.3 一、部署NFS 1、在NFS服務端和k8s所有節點部署nfs-utils 因為客戶端去掛載nfs服務端的共享目錄時&…

【開題答辯全過程】以 基于ssm的房屋中介管理系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人,語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

MySQL主從復制之進階延時同步、GTID復制、半同步復制完整實驗流程

1.主從同步1.1主從同步原理是指將主庫的DDL和DML操作通過二進制日志(binlog)傳到從庫服務器,然后在從庫上對這些日志進行重新執行,從而使從庫和主庫數據保持一致1.2環境設置庫名ip地址操作系統mysql版本主庫msyql-master192.168.31.228rhel7.9源碼安裝my…

織信低代碼:用更聰明的方式,把想法變成現實!

你有沒有過這樣的時刻?想親手做一個應用,卻因為“不會編碼”而遲遲沒有開始;或曾無奈地目睹公司里一個看似簡單的需求,硬是耗費數月、投入大量人力反復開發……現在,有一類工具正在改變這一切。它叫低代碼。而今天我們…

【序列晉升】28 云原生時代的消息驅動架構 Spring Cloud Stream的未來可能性

目錄 一、Spring Cloud Stream是什么? 二、誕生背景與設計動機 2.1 微服務架構的挑戰 2.2 Spring生態的發展 2.3 Spring Integration的演進 三、架構設計與核心組件 3.1 分層架構設計 3.2 核心組件詳解 3.3 編程模型 四、解決的問題與優勢 4.1 解決的核心…

內網后滲透攻擊--linux系統(權限維持)

用途限制聲明,本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具,嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果,作者及發布平臺不承擔任何責任。滲透測試涉及復雜技…

C++筆記之同步信號量、互斥信號量與PV操作再探(含軟考題目)

C++筆記之同步信號量、互斥信號量與PV操作再探(含軟考題目) code review! 參考筆記: 1.C++筆記之同步信號量、互斥信號量與PV操作再探(含軟考題目) 2.C++筆記之信號量、互斥量與PV操作 參考鏈接 1.嵌入式基礎知識-信號量,PV原語與前趨圖 2.信號量、PV操作及軟考高級試題解析…

布隆過濾器:快速判斷某個元素是否存在

特點:高效、空間占用小、允許一定誤判 布隆過濾器在 Redis 里的實現機制,核心就是:用一個大位圖(bitmap)來表示集合 位圖長度 m 初始值都是 0 插入元素時通過 k 個不同的哈希函數,對元素做哈希 每個哈希結…

C# 修改基類List中某一元素的子類類型

描述&#xff1a;基類&#xff1a;BaseClass子類1&#xff1a;A子類2&#xff1a;B然后我有一個List<BaseClass>類型的鏈表:list&#xff0c;我先往list中添加了兩個元素&#xff1a;第一個元素為A類型&#xff0c;第二個元素為B類型&#xff0c;然后我想改變第一個元素類…

基于STM32智能陽臺監控系統

基于STM32智能陽臺監控系統&#xff08;程序&#xff0b;原理圖元件清單&#xff09;功能介紹具體功能&#xff1a;1.采用STM32作為主控芯片實現檢測和控制&#xff1b;2.通過光敏電阻采集光線&#xff0c;將當前光線值在LCD1602顯示&#xff0c;低于50%控制LED亮&#xff0c;高…

動態維護有效區間:滑動窗口

右指針不斷移動獲取解&#xff0c;左指針不斷移動縮小解范圍 左指針的意義非常重要&#xff0c;相當于一個標兵&#xff0c;不斷與這個標兵進行比較&#xff0c;如果符合要求&#xff0c;這左指針進行移動&#xff0c;并進行操作&#xff0c;如果不符合要求&#xff0c;則左指針…

嵌入式學習---(單片機)

1.UART的概念通用異步收發器&#xff0c;2個串口&#xff08;1個串口被用于ISP下載程序&#xff0c;1個串口被用于和主機之間的通信&#xff09;&#xff0c;RXD(接收信號線) TXD(發送信號線)2、單工、半雙工、全雙工概念對比維度單工&#xff08;Simplex&#xff09;半雙工&am…

基于單片機的寵物屋智能系統設計與實現(論文+源碼)

1設計思路本設計基于單片機的寵物屋智能系統核心是實現對寵物生活環境及狀態的智能管理。系統以單片機為中樞&#xff0c;連接紅外測溫傳感器&#xff0c;可實時精準捕捉寵物體溫變化&#xff0c;以便及時發現健康異常&#xff1b;水位檢測傳感器時刻監測飲用水余量&#xff0c…

【面試】Java基礎面試題

1. Java 基本數據類型有哪些&#xff1f;場景&#xff1a;面試官問「String 是不是基本類型&#xff1f;」答案要點&#xff1a;8 種基本類型&#xff1a;byte, short, int, long, float, double, char, boolean。String 是引用類型。追問鏈條&#xff1a;問&#xff1a;為什么…

PHP云課堂在線網課系統 多功能網校系統 在線教育系統源碼

內容目錄一、詳細介紹二、效果展示1.部分代碼2.效果圖展示三、學習資料下載一、詳細介紹 云課堂&#xff0c;依托騰訊云基礎服務架構&#xff0c;采用C擴展框架Phalcon開發&#xff0c; 系統功能 實現了點播、直播、專欄、會員、積分、秒殺、微聊等。 友情提示&#xff1a;…

GEM5學習(4): 運行全系統模式的ARM系統

詳細說明可以見官網 gem5: Extending gem5 for ARM 下載鏡像 mkdir -p cpu_tests/benchmarks/bin/arm cd cpu_tests/benchmarks/bin/arm wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/arm/Bubblesort wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/arm…

快捷:常見ocr學術數據集預處理版本匯總(適配mmocr)

快捷&#xff1a;常見ocr學術數據集預處理版本匯總&#xff08;適配mmocr&#xff09;快捷&#xff1a;常見ocr學術數據集預處理版本匯總&#xff08;適配mmocr&#xff09;狀態指標驗證快捷&#xff1a;常見ocr學術數據集預處理版本匯總&#xff08;適配mmocr&#xff09; 狀…